1
我有一个m×n的矩阵(n> 3),其中两个第一列有很多重复的值。我有另外两个向量,称它们为uniqueCol1
和uniqueCol2
,它们包含两列的所有可能值。查找匹配多个条件之一的数组元素,按匹配条件排序
我想找到所有的子矩阵,它将是p-by-n(p = < m),其中两个第一列匹配uniqueCol1
和uniqueCol2
中的给定值。有多达length(uniqueCol1) * length(uniqueCol2)
这样的子矩阵。
我可以使用ismember()
来帮助找到这些子矩阵,但我不能看到这样做的方式,我会知道输出的哪些部分匹配什么条件。
或者我可以做一个循环,如下所示,但这是非常缓慢的。有没有一种矢量化以下的方法?我想这个解决方案的输出是这些子矩阵的一个单元阵列,因为每个子矩阵的大小通常不一样(所以多维数组将不起作用)。
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
精湛,是加快我的测试情况下增长超过10倍 – funklute
我说'accumarray'是强大;-) –