Numpy中Scipy模式功能的替代方案?

Numpy中Scipy模式功能的替代方案?,numpy,scipy,frequency,mode,Numpy,Scipy,Frequency,Mode,在numpy中是否有其他方法实现scipy.stats.mode函数以获取沿轴的nArray中最频繁的值?(不导入其他模块),即 scipy.stats.mode函数是用此代码定义的,它只依赖于numpy: def mode(a, axis=0): scores = np.unique(np.ravel(a)) # get ALL unique values testshape = list(a.shape) testshape[axis] = 1 o

在numpy中是否有其他方法实现scipy.stats.mode函数以获取沿轴的nArray中最频繁的值?(不导入其他模块),即


scipy.stats.mode
函数是用此代码定义的,它只依赖于numpy:

def mode(a, axis=0):
    scores = np.unique(np.ravel(a))       # get ALL unique values
    testshape = list(a.shape)
    testshape[axis] = 1
    oldmostfreq = np.zeros(testshape)
    oldcounts = np.zeros(testshape)

    for score in scores:
        template = (a == score)
        counts = np.expand_dims(np.sum(template, axis),axis)
        mostfrequent = np.where(counts > oldcounts, score, oldmostfreq)
        oldcounts = np.maximum(counts, oldcounts)
        oldmostfreq = mostfrequent

    return mostfrequent, oldcounts

来源:

如果您知道没有太多不同的值(相对于输入“itemArray”的大小),类似这样的方法可能会很有效:

uniqueValues = np.unique(itemArray).tolist()
uniqueCounts = [len(np.nonzero(itemArray == uv)[0])
                for uv in uniqueValues]

modeIdx = uniqueCounts.index(max(uniqueCounts))
mode = itemArray[modeIdx]

# All counts as a map
valueToCountMap = dict(zip(uniqueValues, uniqueCounts))
uniqueValues = np.unique(itemArray).tolist()
uniqueCounts = [len(np.nonzero(itemArray == uv)[0])
                for uv in uniqueValues]

modeIdx = uniqueCounts.index(max(uniqueCounts))
mode = itemArray[modeIdx]

# All counts as a map
valueToCountMap = dict(zip(uniqueValues, uniqueCounts))