我试图用二维数组上的视图intersect1d函数来找到它的第一列与另一个1D数组的交集,维护其最终结果中的第二列。不过,我试图构建视图卡住了。Python的Numpy intersect1d与一维数组与二维数组
示例输入:
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]]
我试图用二维数组上的视图intersect1d函数来找到它的第一列与另一个1D数组的交集,维护其最终结果中的第二列。不过,我试图构建视图卡住了。Python的Numpy intersect1d与一维数组与二维数组
示例输入:
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]]
理想情况下,希望有的行指数或交叉那些的掩模。现在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)
的〔np.intersect1d]的文档(http://docs.scipy.org/doc /numpy-1.10.1/reference/generated/numpy.intersect1d.html)并没有提供关于多维数组的任何信息(尽管它仍然返回一个结果,而没有引发任何错误或折旧警告......)。但是,这不是你期望的结果。 – Emilien