最小的變化,你可以得到你的工作方式:
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)
如果你的數組不是浮動,且都是連續的,那麼下面會更快:
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
有什麼你試過自己,沒有工作? –
是的,我嘗試了k [np.in1d(k.view(dtype ='i,i')。reshape(k.shape [0]),k2.view(dtype ='i,i')。reshape(k2。形狀[0]))]從http://stackoverflow.com/questions/16210738/numpy-in1d-for-2d-arrays。但我得到一個重塑錯誤。 –
好的,你可以編輯這個問題,這樣每個人都可以清楚地看到它嗎? –