Python Numpy在带有2D数组的1D数组上的intersect1d

时间:2016-02-26 15:32:24

标签: python python-2.7 numpy

我试图将intersect1d函数与2D数组上的视图一起使用,以找到它的第一列与另一个1D数组的交集,并在最终结果中保留其第二列。但是我一直试图构建视图。

示例输入:

a1 = np.array([[1,2],[3,4],[4,9]], dtype=np.uint32)
a2 = np.array([8,3,8,1,0,9,3,2], dtype=np.uint32)

期望的结果是:

[[1,2],[3,4]]

1 个答案:

答案 0 :(得分:3)

理想情况下,您希望拥有行索引或相交的掩码。现在np.intersect1d实际上并没有给你。要解决此问题,您可以使用np.in1d来获取相交行的掩码。因此,使用它进行索引将是您想要的输出,如此 -

a1[np.in1d(a1[:,0],a2)]

示例运行 -

In [15]: a1
Out[15]: 
array([[1, 2],
       [3, 4],
       [4, 9]], dtype=uint32)

In [16]: a2
Out[16]: array([8, 3, 8, 1, 0, 9, 3, 2], dtype=uint32)

In [17]: np.in1d(a1[:,0],a2) # Intersecting rows mask for a1
Out[17]: array([ True,  True, False], dtype=bool)

In [18]: a1[np.in1d(a1[:,0],a2)]
Out[18]: 
array([[1, 2],
       [3, 4]], dtype=uint32)
相关问题