簡體   English   中英

比較兩個不同長度的 numpy arrays linewise

[英]Comparing two numpy arrays with different lengths line-wise

我正在嘗試將所有元素與兩個不同長度 arrays 的所有元素進行比較。假設我有一個數組:

A = np.array([[15,25,22],[200,200,20]])

第二個數組是我要與之比較的數組:

B = np.array([[150., 350.],
 [250., 450.],
 [150., 350.],
 [400., 600.],
 [400., 600.],
 [650., 850.],
 [550., 750.],
 [650., 850.]])

我需要的是將 A ( A[:, 0] ) 中所有 arrays 的索引 0 上的所有元素與數組 B ( B[:, 0] ) 中所有 arrays 中索引 0 上的所有元素進行比較。

如果 A 只是一個簡單的數組,例如A=[25,40,25] ,那么它可以簡單地完成:

smaller = np.array(A[0] > B[:, 0]).astype('int')

我以為我可以將它轉換為二維比較,這樣

smaller = np.array(A[:, 0] > B[:, 0]).astype('int')

這不起作用,錯誤很明顯, ValueError: operands could not be broadcast together with shapes (2,) (8,) 我知道這樣我無法比較它,但我無法找到如何這樣做的方法。

我想要的 output 看起來像這樣:

[[False, False, False, False, False, False, False, False],
 [True, False, True, False, False, False, False, False]]

這就是我能擁有的

np.array([A[i,0] > B[:, 0] for i in range(A.shape[0])])

感謝@MichaelSzczesny,我得到了我正在尋找的解決方案。 只需將[:, None]添加到比較中即可:

smaller = np.array(A[:, 0][:, None] > B[:, 0]).astype('int')

正如Python 中在數組索引中使用 None 中所解釋的,它向數組添加了一個軸。 因此從

[ 15 200]

我們得到

[[ 15]
 [200]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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