我有一個 2d numpy 陣列,我試圖沿軸 = 0(行)回傳模式陣列。但是,我想回傳最頻繁的唯一行組合。而不是所有三列的三種模式,這是 scipy stats 模式所做的。下面示例中的所需輸出為 [9,9,9],因為這是最常見的唯一行。謝謝
'''
from scipy import stats
arr1 = np.array([[2,3,4],[2,1,5],[1,2,3],[2,4,4],[2,8,2],[2,3,1],[9,9,9],[9,9,9]])
stats.mode(arr1, axis = 0)
output:
ModeResult(mode=array([[2, 3, 4]]), count=array([[5, 2, 2]]))
'''
uj5u.com熱心網友回復:
您可以使用 numpy 獨特的功能并回傳計數。
unique_arr1, count = np.unique(arr1,axis=0, return_counts=True)
unique_arr1[np.argmax(count)]
輸出:
array([9, 9, 9])
np.unique 以排序順序回傳唯一陣列,這意味著保證最后一個是最大值。你可以簡單地做:
out = np.unique(arr1,axis=0)[-1]
但是,我不知道您要出于什么目的使用它,只是想提一下,您可以擁有所有計數,以防萬一您想要驗證或考慮具有相同計數的多行。
更新 給出的附加資訊,這是針對影像(可能很大),最重要的是,第二個暗淡可以適合 int(每個值是 uin8 或 16)可以適合 int32 或 64。(考慮 uint8 中每個像素的值):
pixel, count = np.unique(np.dot(arr, np.array([2**16,2**8,1])), return_counts=True)
pixel = pixel[np.argmax(count)]
b,g, r, = np.ndarray((3,), buffer=pixel, dtype=np.uint8)
這可能會導致很大的加速。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/533777.html
