簡體   English   中英

不同長度的numpy數組的元素比較

[英]Elementwise comparison of numpy arrays with different lengths

我想比較兩個不同長度的3D numpy數組的元素。 目的是在兩個數組中查找重疊的元素。

到目前為止,我發現的所有函數都依賴兩個長度相同的數組。

有沒有一種比較2D元素的有效方法(對於循環來說,效率很低,因為每個數組都有成千上萬個元素)?

您想要的是intersect1d嗎? 例如,如果您的數組是ab ,則可以簡單地執行以下操作:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM