Numpy中Scipy模式功能的替代方案?
在numpy中是否有其他方法实现scipy.stats.mode函数以获取沿轴的nArray中最频繁的值?(不导入其他模块),即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
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))