【问题标题】:How to work with find?如何使用查找?
【发布时间】:2013-10-25 11:37:47
【问题描述】:

我遇到了查找问题。不知道是什么问题。

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

我的矩阵是selectedlselectedf,它们有相似的行和不同的行。

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

线路有什么问题?

【问题讨论】:

  • 你得到什么错误?矩阵大小是多少?
  • 假设矩阵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]你想展示什么?
  • 我想从第一个矩阵或 [7 8 -1;10 11 - 中找到具有相同 X 和 Y 以及不同 Z 的行。 1]来自第二个矩阵。谢谢。
  • @ahmadhosseini 我的回答会给你[7 8 9;10 11 12] 从那个例子...?

标签: matlab find


【解决方案1】:

更易读的版本是:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案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)
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-22
        • 2014-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多