代码之家  ›  专栏  ›  技术社区  ›  sazr

计算模式时忽略某些值

  •  1
  • sazr  · 技术社区  · 6 年前

    例如;

    [[-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 回复  |  直到 6 年前
        1
  •  1
  •   Hans Musgrave    6 年前

    如果你不想的话,你甚至不需要把数组变平。花哨的索引非常棒。另外,您可以避免转换为 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]