查找数组Numpy中非零元素的模式

时间:2019-02-14 20:37:12

标签: python numpy scipy

在非零元素的多维数组中查找每行模式的最有效方法是什么?

例如:

[
 [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]

1 个答案:

答案 0 :(得分:0)

您将使用与this问题相同的方法(在@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))