【发布时间】:2015-10-21 23:25:56
【问题描述】:
假设我有一个矩阵 A,包含可能的值对和一个矩阵 B,包含所有值对:
A = [1,1;2,2;3,3];
B = [1,1;3,4;2,2;1,1];
我想创建一个矩阵 C,其中包含 A 允许的所有对(即 C = [1,1;2,2;1,1])。
使用 C = ismember(A,B,'rows') 只会显示第一次出现的 1,1,但我需要两者。
目前我使用 for 循环来创建 C,如下所示:
TFtot = false(size(B(:,1,1),1);
for i = 1:size(a(:,1),1)
TF1 = A(i,1) == B(:,1) & A(i,2) = B(:,2);
TFtot = TF1 | TFtot;
end
C = B(TFtot,:);
我想创建一个更快的方法,因为这个循环目前大大减慢了算法。
【问题讨论】:
-
TFTot将是0或1,具体取决于您是否使用A中的任何行在B中找到任何 匹配项。如果有的话,您的代码只会选择出B的第一行。您可能应该使TFtot成为一个数组,以跟踪我们是否在A中找到了B中的特定行。此外,A(i,2) = B(:,2)确实应该是A(i,2) == B(:,2).... 但是将标量与向量进行比较将产生真 除非比较结果中的所有 值都是 0。您应该在其中使用any/all案例。
标签: performance matlab matrix indices