Matlab 如何使用find?

Matlab 如何使用find?,matlab,find,Matlab,Find,我对find有问题。我不知道是什么问题 我想在一个矩阵中,通过另一个具有相同X,Y和不同Z的矩阵来求指数 我的矩阵是selectedl和selectedf,具有相似的行和不同的行 exP=find(selectedl(:,[1,2])==selectedf(:,[1,2]) & selectedl(:,3)~=selectedf(:,3)); 行中的问题是什么?如果我理解正确(第一列是x,第二列是y,第三列是z,每行代表一个不同的点),您只需在第一部分中按行添加all: exP=fin

我对find有问题。我不知道是什么问题

我想在一个矩阵中,通过另一个具有相同X,Y和不同Z的矩阵来求指数

我的矩阵是
selectedl
selectedf
,具有相似的行和不同的行

exP=find(selectedl(:,[1,2])==selectedf(:,[1,2]) & selectedl(:,3)~=selectedf(:,3));
行中的问题是什么?

如果我理解正确(第一列是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的答案。

更具可读性的版本是:

A = selectedl == selectedf;
exP = find(A(:,1) & A(:,2) & ~A(:,3));

您可能应该使用
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,矩阵甚至不必具有相同的长度。

您会得到什么错误?矩阵的大小是多少?假设矩阵
A=[1 2 3;4 5 6;7 8 9;10 11 12]
和矩阵
B=[4 5 6;7 8-1;10 11 12;10 11-1;4 5 6]
您想显示什么?我想找到X和Y相同、Z不同的行。例如,我想从第一个矩阵得到[7 8 9;10 11 12],或者从第二个矩阵得到[7 8-1;10 11-1]。谢谢。@ahmadhosseini我的答案会给你这个例子的
[7 8 9;10 11 12]
。。。?