gpt4 book ai didi

python - 获取 Numpy 二维数组相交行的索引

转载 作者:太空狗 更新时间:2023-10-29 23:59:02 25 4
gpt4 key购买 nike

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

A=array([[1, 2],
[3, 4],
[5, 6],
[7, 8],
[9, 10]])

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

result=[0,2]

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

如何有效地为二维数组完成这项工作?

谢谢!

编辑

我试过这个功能:

k[np.in1d(k.view(dtype='i,i').reshape(k.shape[0]),k2.view(dtype='i,i').
reshape(k2.shape[0]))]

来自 Implementation of numpy in1d for 2D arrays?但我收到 reshape 错误。我的数据类型是 float (带两位小数)。此外,我也尝试过使用集合,但性能很慢。

最佳答案

只需进行最少的更改,您就可以使用自己的方法:

In [15]: A
Out[15]:
array([[ 1, 2],
[ 3, 4],
[ 5, 6],
[ 7, 8],
[ 9, 10]])

In [16]: B
Out[16]:
array([[1, 4],
[1, 2],
[5, 6],
[6, 3]])

In [17]: np.in1d(A.view('i,i').reshape(-1), B.view('i,i').reshape(-1))
Out[17]: array([ True, False, True, False, False], dtype=bool)

In [18]: np.nonzero(np.in1d(A.view('i,i').reshape(-1), B.view('i,i').reshape(-1)))
Out[18]: (array([0, 2], dtype=int64),)

In [19]: np.nonzero(np.in1d(A.view('i,i').reshape(-1), B.view('i,i').reshape(-1)))[0]
Out[19]: array([0, 2], dtype=int64)

如果您的数组不是 float ,并且都是连续的,那么以下会更快:

In [21]: dt = np.dtype((np.void, A.dtype.itemsize * A.shape[1]))

In [22]: np.nonzero(np.in1d(A.view(dt).reshape(-1), B.view(dt).reshape(-1)))[0]
Out[22]: array([0, 2], dtype=int64)

快速计时:

In [24]: %timeit np.nonzero(np.in1d(A.view('i,i').reshape(-1), B.view('i,i').reshape(-1)))[0]
10000 loops, best of 3: 75 µs per loop

In [25]: %timeit np.nonzero(np.in1d(A.view(dt).reshape(-1), B.view(dt).reshape(-1)))[0]
10000 loops, best of 3: 29.8 µs per loop

关于python - 获取 Numpy 二维数组相交行的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23814517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com