我有查找问题。我不知道是什么问题。
我想在矩阵中找到具有相同X,Y和不同Z的另一个矩阵的索引。
我的矩阵是selectedl
和selectedf
,行数和行数相似。
exP=find(selectedl(:,[1,2])==selectedf(:,[1,2]) & selectedl(:,3)~=selectedf(:,3));
该行有什么问题?
答案 0 :(得分:1)
更易读的版本是:
A = selectedl == selectedf;
exP = find(A(:,1) & A(:,2) & ~A(:,3));
答案 1 :(得分:0)
如果我理解正确(第一列是 x ,第二列是 y ,第三列是 z ,每行代表一个不同的点),你只需要在第一部分中添加行all
:
exP=find(all(selectedl(:,[1,2])==selectedf(:,[1,2]),2) & selectedl(:,3)~=selectedf(:,3));
或者,或许更具可读性:
exP=find(selectedl(:,1)==selectedf(:,1) & selectedl(:,2)==selectedf(:,2) & selectedl(:,3)~=selectedf(:,3));
这假设两个矩阵具有相同的大小和顺序。如果没有,请参阅@ Dan的回答。
答案 2 :(得分:0)
您可能应该使用ismember
而不是find
:
[incl, indices] = ismember(selectedl(:,1:2), selectedf(:,1:2), 'rows'); %// Or possibly ismember(selectedf(:,1:2), selectedl(:,1:2), 'rows') depending on what you're after
excl = ismember(selectedl, selectedf, 'rows');
indices(incl & ~excl)
这样,您的行不必在两个矩阵中对应1对1,并且矩阵甚至不需要具有相同的长度。