【问题标题】:Indices of intersecting rows of Numpy 2d ArrayNumpy 2d Array 相交行的索引
【发布时间】:2017-07-25 02:36:44
【问题描述】:

我想获取一个主 numpy 二维数组 A 与另一个 B 的相交行的索引。

A = array([[1,2],
           [1,3],
           [2,3],
           [2,4],
           [2,5],
           [3,4]
           [4,5]])

B = array([[1,2],
           [3,2],
           [2,4]])

result=[0, -2, 3]  
##Note that the intercept 3,2 must assign (-) because it is the opposite

这应该根据数组 A 的索引返回 [0, -2, 3]。

谢谢!

【问题讨论】:

    标签: python arrays numpy intersect


    【解决方案1】:

    numpy_indexed 包(免责声明:我是它的作者)具有有效解决此类问题的功能。

    import numpy_indexed as npi
    A = np.sort(A, axis=1)
    B = np.sort(B, axis=1)
    result = npi.indices(A, B)
    result *= (A[:, 0] == B[:, 0]) * 2 - 1
    

    【讨论】:

    • 谢谢!这确实适用于我的情况,但结果都是负面的,只有反转的应该是负面的,我该如何解决这个问题?
    • 应该在排序之前评估 ==
    【解决方案2】:

    您可以参考代码。

    import numpy as np
    A = np.array([[1,2],
               [1,3],
               [2,3],
               [2,4],
               [2,5],
               [3,4],
               [4,5]])
    
    B = np.array([[1,2],
               [3,2],
               [2,4]])
    
    result=[]
    
    for i in range(0, len(A)):
        for j in range(0, len(B)):
            if A[i].tolist() == B[j].tolist():
                result.append(i)
            if A[i].tolist()[::-1] == B[j].tolist():
                result.append(-i)
    print(result)
    

    输出是:

    [0, -2, 3]
    

    【讨论】:

    • 很好!但是我有一个5万行的数组,对于这么大的数组,这个循环变得不切实际,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-08-09
    • 2013-09-26
    • 1970-01-01
    • 2018-09-21
    • 2017-05-04
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    相关资源
    最近更新 更多