我有一个大矩阵,我们称它为A,其尺寸为Mx3,例如M = 4000行×3列。矩阵中的每一行包含三个数字,例如。 [241 112 478]。在这三个数字中,我们可以构造三对,例如。 [241 112],[112 478],[241 478]。在其他3999行中:
这是一个完成此任务的功能,但速度很慢 - 我想知道是否有更有效的方法。提前谢谢!
M=size(A,1); % no elements
B=zeros(M,3);
for j=1:M
l=1;
k=1;
while l<4 % there cant be more than 3
if k~=j
s=sum(ismember(A(j,:),A(k,:)));
if s==2
B(j,l)=k;
l=l+1;
end
end
k=k+1;
end
答案 0 :(得分:2)
不需要For循环,只需按以下方式使用ismember
:
row_id1=find(sum(ismember(M,[241 112]),2)>1);
row_id2=find(sum(ismember(M,[478 112]),2)>1);
row_id3=find(sum(ismember(M,[478 241]),2)>1);
每个row_id
将为您提供该行中该对的行索引,无论其出现的顺序如何。
此处唯一的假设是,您查找的对号中的一个不连续出现两次(即[112 333 112]
)。如果这个假设是错误的,可以使用unique
解决这个问题。