-2

我的查找有问题。我不知道是什么问题。

我想根据另一个具有相同 X、Y 和不同 Z 的矩阵来查找矩阵中的索引。

我的矩阵有相似的行和不同的行selectedlselectedf

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

该行有什么问题?

4

3 回答 3

1

更易读的版本是:

A = selectedl == selectedf;
exP = find(A(:,1) & A(:,2) & ~A(:,3));
于 2013-10-25T12:23:38.703 回答
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)

这样,您的行不必在两个矩阵中一一对应,并且矩阵甚至不需要具有相同的长度。

于 2013-10-25T12:35:31.263 回答
0

如果我理解正确(第一列是x,第二列是y,第三列是zall ,每一行代表一个不同的点),你只需要在第一部分逐行添加:

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 的回答。

于 2013-10-25T12:06:57.050 回答