【问题标题】:Row-wise compare two arrays of unequal sizes but same dimensions. (Python)逐行比较两个大小不等但维度相同的数组。 (Python)
【发布时间】:2020-03-24 21:00:32
【问题描述】:

我有两个大小为 (m,2) 和 (n,2) 的数组 A 和 B。 A 和 B 将非零元素的索引存储在两个不同的矩阵 P 和 Q 中。

我想找到匹配的索引,所以我可以找到哪些索引存储非零值。

【问题讨论】:

    标签: python arrays compare 2d rowwise


    【解决方案1】:

    不能 100% 确定这就是您要查找的内容,因为您没有给出示例输入和输出,但我认为您想要的就是这里。本质上,循环遍历第一个数组中的每个元素并搜索该元素是否存在于第二个数组中。然后展平输出数组。

    a = [[1,2],[3,4],[5,6],[7,8],[9,10],[11,12]]
    b = [[5,7],[2,9],[13,12]]
    
    np.shape(a)  #(6,2)
    np.shape(b)  #(3,2)
    
    # Find items common to both
    c = [[[item for item in a[i] if item in b[j]] for i in range(len(a))] for j in range(len(b))]
    
    # [[[], [], [5], [7], [], []],
    #  [[2], [], [], [], [9], []],
    #  [[], [], [], [], [], [12]]]
    
    # Remove empties and flatten
    c = [item for elements in c for items in elements for item in items if item != []]
    #  [5, 7, 2, 9, 12]
    

    编辑:

    可能更便于阅读的方法是先将 a 和 b 展平:

    a_f = [item for items in a for item in items]
    # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
    
    b_f = [item for items in b for item in items]
    # [5, 7, 2, 9, 13, 12]
    

    然后通过循环执行:

    c = [item for item in a_f if item in b_f]
    # [2, 5, 7, 9, 12]
    

    EDIT2:

    我可能误解了这个问题。如果数组中的元素是二维坐标/索引,那么你只需要这个:

    a = [[1,2],[3,4],[5,6],[7,8],[9,10],[11,12]]
    b = [[5,6],[1,14],[8,7],[3,4]]
    
    c = [item for item in a if item in b]
    #  [[3, 4], [5, 6]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 2016-02-24
      相关资源
      最近更新 更多