我有一個這樣的陣列
Nbank = np.array([[2, 3, 1],
[1, 2, 2],
[3, 2, 1],
[3, 2, 1],
[2, 3, 2],
[2, 2, 3],
[1, 1, 3],
[2, 1, 1],
[2, 2, 3],
[1, 1, 1],
[2, 1, 1],
[2, 3, 1],
[1, 2, 1]])
我想回傳一個只有一列的陣列。條件是回傳每一行中最常見的值;如果多個值具有相同的出現次數,則只回傳它們中的最大值。
我用了這個代碼
most_f = np.array([np.bincount(row).argmax() for row in Nbank])
如果多個值的出現次數相同,則回傳第一項而不是最大值。我該如何解決這個問題?
uj5u.com熱心網友回復:
您可以在按行降序排序后使用 Counter。有一個most_common會回傳你想要的。由于它已經排序,第一個元素總是最大的或最頻繁的。
import numpy as np
from collections import Counter
Nbank = np.array([[2, 3, 1],
[1, 2, 2],
[3, 2, 1],
[3, 2, 1],
[2, 3, 2],
[2, 2, 3],
[1, 1, 3],
[2, 1, 1],
[2, 2, 3],
[1, 1, 1],
[2, 1, 1],
[2, 3, 1],
[1, 2, 1]])
np.array([Counter(sorted(row, reverse=True)).most_common(1)[0][0] for row in Nbank])
輸出
array([3, 2, 3, 3, 2, 2, 1, 1, 2, 1, 1, 3, 1])
uj5u.com熱心網友回復:
我相信這會解決問題。你可能會用一些花哨的串列理解將它變成一個單行,但我認為這不值得。
most_f = []
for n in Nbank: #iterate over elements
counts = np.bincount(n) #count the number of elements of each value
most_f.append(np.argwhere(counts == np.max(counts))[-1][0]) #append the last and highest
uj5u.com熱心網友回復:
這可以給出陣列中存在的最大值
Nbank.max()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372115.html
下一篇:在Python中制作串列串列
