簡體   English   中英

查找numpy數組中每行的最大值以及相同大小的另一個數組中的相應元素

[英]Find maximum of each row in a numpy array and the corresponding element in another array of the same size

我是Python的新手,仍然不能稱自己為Python程序員。 說到這一點,如果我的問題沒有任何意義,請耐心等待。

題:

我有兩個相同大小的numpy數組,例如A和B,其中A.shape等於B.shape並且它們都相等(5,1000),我想找到A中每行的最大值和相應的元素例如,如果在A的第四行中,最大元素索引是104,那么我想在數組B中找到第四行的第104個元素,而對於其余行則相同。

我知道我可以通過循環遍歷行來實現它,但我想知道是否有更優雅的方式。 例如,如果我在MATLAB中這樣做,我會寫下面的代碼:

B(bsxfun(@eq,A,max(A,[],2)))

任何指導我通過正確方向的幫助將非常感激。

這是做同樣事情的numpy成語:

b[np.arange(len(a)), np.argmax(a, axis=1)]

例如:

>>> a = np.array([
    [1, 2, 0],
    [2, 1, 0],
    [0, 1, 2]
    ])
>>> b = np.array([
    [1, 2, 3],
    [1, 2, 3],
    [1, 2, 3]
    ])
>>> b[np.arange(len(a)), np.argmax(a, axis=1)]
array([2, 1, 3])

作為一個bsxfun愛好者,很bsxfun看到人們試圖將相同的功能復制到其他編程語言。 現在, bsxfun基本上是一種broadcasting機制,它也存在於NumPy中。 在NumPy中,它是通過使用np.newaxis創建單例維度或簡單地為None

回到上下文中的問題,可以實現基於廣播的equivalent解決方案,如示例運行所示 -

In [128]: A
Out[128]: 
array([[40, 63, 67, 65, 19],
       [85, 55, 66, 92, 88],
       [50,  1, 23,  6, 59],
       [67, 55, 46, 78,  3]])

In [129]: B
Out[129]: 
array([[78, 63, 45, 34, 81],
       [ 5, 38, 28, 61, 66],
       [ 3, 65, 16, 25, 32],
       [72,  1, 31, 75,  6]])

In [130]: B[A == A.max(axis=1)[:,None]]
Out[130]: array([45, 61, 32, 75])

print np.max(A[i])這將給出numpy矩陣的第i行中的最高值。

暫無
暫無

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

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