如何在numpy中获取模式?需要警告的是,我想忽略某些值?
例如;
[[-1, 2, -1],
[2, -1, -1],
[2, 45, 1]]
在上面的模式中,模式为-1
,但我想始终忽略所有-1值,因此在上面的示例中,模式应为2
。我想确定该模式及其发生的次数(上例中的3
)。
我的迭代函数如下:
def calc_mode(values, ignore_value=-1):
if values.sum() == ignore_value * values.size:
return -1
mode_map = {}
for (x,y), value in np.ndenumerate(values):
if (value <= ignore_value):
continue
if not value in mode_map:
mode_map[value] = 1
else:
mode_map[value] += 1
if len(mode_map) <= 0:
return -1
mode = max(zip(mode_map.values(), mode_map.keys()))
return mode[1]
答案 0 :(得分:1)
如果您不需要,甚至不必展平阵列。花式索引很棒。此外,如果numpy.ndarray
已经是数组,则可以避免转换为values
对象。
import scipy.stats
import numpy as np
def calc_mode(values, ignore_value=-1):
values = np.array(values)
return scipy.stats.mode(values[values!=ignore_value]).mode[0]