【问题标题】:List all index using ismember使用 ismember 列出所有索引
【发布时间】:2015-04-14 06:56:45
【问题描述】:

假设我有两个数组:

    A:14 63 13
      38 44 23
      11 12 13
      38 44 23

    B:38 44 23 

我正在尝试使用ismember 返回在A 中找到B 的每个位置的索引。我在网上找到的所有示例都只列出了匹配项的第一次或最后一次出现,我试图为所有匹配的值列出索引,甚至是重复的值。谢谢

【问题讨论】:

  • 即使B[38 23 44],您是否期望结果[2 4]?你不是很清楚!!

标签: matlab indexing


【解决方案1】:

ismember'rows' 参数一起使用:

ismember(A, B, 'rows')

这会产生一个逻辑数组[0 1 0 1],这通常比索引数组更好,但如果您需要专门的索引,那么只需使用find

find(ismember(A,B,'rows'))

返回[2,4]

请注意,如果B 有多个行,例如,此方法仍然有效。 B = [38 44 23; 11 12 13],会返回[0; 1; 1; 1]

【讨论】:

    【解决方案2】:

    您可以使用bsxfun 进行比较:

    idx = find( all( bsxfun(@eq, A, B), 2 )); %// only where all line matches
    

    结果

    idx =
     2
     4
    

    【讨论】:

    • 我收到错误消息“两个输入数组的非单一维度必须相互匹配。”这是因为我的A和B尺寸不同吗?我的 A 尺寸为 345000x3,B 尺寸为 19811x3。
    • @Dark 您的设置与您问题中的设置不同!你对不同大小的AB 有什么期望?您是否正在查找B 每一行的所有索引?
    • @Dark,对于AB 的这些大小,对B 的每一行使用for 循环。将idx 输出到元胞数组中
    【解决方案3】:

    如果您有 A 和 B 作为 Nx3 大小的数组,您可以查看 pdist2 -

    [indA,indB] = ind2sub([size(A,1) size(B,1)],find(pdist2(A,B)==0));
    
    ind = [indA,indB]
    

    因此,在ind 中,您将拥有匹配项的成对索引,第一列代表A 的索引,第二列代表B

    示例运行 -

    A =
        14    63    13
        38    44    23
        11    12    13
        14    63    13
        38    44    23
    B =
        38    44    23
        14    63    13
    ind =
         2     1
         5     1
         1     2
         4     2
    

    【讨论】:

    • pdist2 解决方案在比较行平等 +1 时非常优雅 :)
    【解决方案4】:

    这只是shai's answer 的改进版本,用于处理B 的多行

    idx = find(any(all( bsxfun(@eq, A, permute(B,[3 2 1])), 2 ),3));
    

    示例运行:

    A = [14 63 13;
         38 44 23;
         11 12 13;
         38 44 23];
    
    B = [38 44 23;
         11 12 13];
    
    idx = find(any(all( bsxfun(@eq, A, permute(B,[3 2 1])), 2 ),3));
    
    >> idx
    
    idx =
    
     2
     3
     4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      • 2012-10-06
      • 1970-01-01
      • 2013-08-12
      • 2017-03-02
      • 2014-10-31
      • 1970-01-01
      相关资源
      最近更新 更多