簡體   English   中英

查找數組Numpy中非零元素的模式

[英]Find mode of non-zero elements in array Numpy

在非零元素的多維數組中查找每行模式的最有效方法是什么?

例如:

[
 [0.  0.4 0.6 0.  0.6 0.  0.6 0.  0.  0.6 0.  0.6 0.6 0.6 0.  0.  0.  0.6
     0.  0.  0.  0.  0.  0.  0.  0.  0.5 0.6 0.  0.  0.6 0.6 0.6 0.  0.  0.6
     0.6 0.6 0.  0.5 0.6 0.6 0.  0.  0.6 0.  0.6 0.  0.  0.6],
 [0.  0.1 0.2 0.1 0.  0.1 0.1 0.1 0.  0.1 0.  0.  0.  0.1 0.1 0.  0.1 0.1
 0.  0.1 0.1 0.1 0.  0.1 0.1 0.1 0.  0.1 0.2 0.  0.1 0.1 0.  0.1 0.1 0.1
 0.  0.2 0.1 0.  0.1 0.  0.1 0.1 0.  0.1 0.  0.1 0.  0.1]
]

上面的模式是[0, 0.1] ,但理想情況下我們想返回[0.6, 0.1]

您將使用與問題相同的方法(在@yatu的注釋中提到),但是調用numpy.nonzero()方法。

為了只獲取非零元素,我們可以調用nonzero方法,該方法將返回非零元素的索引。 如果a是一個numpy數組,我們可以使用以下命令執行此操作:

a[nonzero(a)]

查找模式的示例(從其他答案構建代碼):

import numpy as np
from scipy import stats

a = np.array([
    [1, 0, 4, 2, 2, 7],
    [5, 2, 0, 1, 4, 1],
    [3, 3, 2, 0, 1, 1]]
)

def nonzero_mode(arr):
    return stats.mode(arr[np.nonzero(arr)]).mode

m = map(nonzero_mode, a)
print(m)

如果要獲取每一行的模式,只需使用遍歷數組的循環即可:

for row in a:
   print(nonzero_mode(row))

暫無
暫無

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

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