【发布时间】:2015-06-05 00:15:04
【问题描述】:
我有一个 m×n 矩阵 (n > 3),其中前两列有很多重复值。我还有另外两个向量,分别称为uniqueCol1 和uniqueCol2,它们包含两列的所有可能值。
我想找到所有的子矩阵,它们将是 p-by-n (p =uniqueCol1 和 uniqueCol2 中的给定值匹配。最多有length(uniqueCol1) * length(uniqueCol2) 这样的子矩阵。
我可以使用ismember() 来帮助查找这些子矩阵,但我看不到一种方法可以知道输出的哪些部分与什么条件匹配。
或者,我可以执行一个 for 循环,如下所示,但这非常慢。有没有办法对以下内容进行矢量化?我想该解决方案将具有这些子矩阵的单元数组作为输出,因为每个子矩阵的大小通常不同(因此多维数组不起作用)。
myBigMatrix = round(wgn(1000,6,1) * 3);
uniqueCol1 = unique(myBigMatrix(:,1));
uniqueCol2 = unique(myBigMatrix(:,2));
for i = 1:length(uniqueCol1)
for j = 1:length(uniqueCol2)
mySubMatrix = myBigMatrix( ...
myBigMatrix(:,1) == uniqueCol1(i) & ...
myBigMatrix(:,2) == uniqueCol2(j) , :);
% then do something with mySubMatrix,
% as it's clear from i and j what condition it matched
end
end
【问题讨论】:
标签: arrays matlab matrix cell-array