在忽略某些值的情况下计算模式

时间:2018-08-11 15:31:00

标签: python numpy

如何在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]

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]