[英]Elementwise comparison of numpy arrays with different lengths
我想比較兩個不同長度的3D numpy數組的元素。 目的是在兩個數組中查找重疊的元素。
到目前為止,我發現的所有函數都依賴兩個長度相同的數組。
有沒有一種比較2D元素的有效方法(對於循環來說,效率很低,因為每個數組都有成千上萬個元素)?
您想要的是intersect1d
嗎? 例如,如果您的數組是a
和b
,則可以簡單地執行以下操作:
duplicates = np.intersect1d(a, b)
以下是比較2個1d數組的幾種方法:
In [325]: n=np.arange(0,10)
In [326]: m=np.arange(3,9)
In [327]: np.in1d(n,m)
Out[327]: array([False, False, False, True, True, True, True, True, True, False], dtype=bool)
In [328]: np.in1d(m,n)
Out[328]: array([ True, True, True, True, True, True], dtype=bool)
In [329]: n[:,None]==m[None,:]
Out[329]:
array([[False, False, False, False, False, False],
[False, False, False, False, False, False],
[False, False, False, False, False, False],
[ True, False, False, False, False, False],
[False, True, False, False, False, False],
[False, False, True, False, False, False],
[False, False, False, True, False, False],
[False, False, False, False, True, False],
[False, False, False, False, False, True],
[False, False, False, False, False, False]], dtype=bool)
和farenorth
的建議
In [330]: np.intersect1d(n,m)
Out[330]: array([3, 4, 5, 6, 7, 8])
In [331]: np.where(np.in1d(n,m))
Out[331]: (array([3, 4, 5, 6, 7, 8], dtype=int64),)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.