首先,我将杂乱的列表更改为两个numpy
数组,就像@ user8153那样:
val, freq = np.array(list_tuples).T
然后,您可以重建数组(使用np.repeat
防止循环):
data = np.repeat(val, freq)
并在您的阵列上使用numpy
统计函数data
。
如果这导致内存错误(或者您只是想尽可能提高性能),则还可以使用一些专门构建的函数:
def mean_(val, freq):
return np.average(val, weights = freq)
def median_(val, freq):
ord = np.argsort(val)
cdf = np.cumsum(freq[ord])
return val[ord][np.searchsorted(cdf, cdf[-1] // 2)]
def mode_(val, freq): #in the strictest sense, assuming unique mode
return val[np.argmax(freq)]
def var_(val, freq):
avg = mean_(val, freq)
dev = freq * (val - avg) ** 2
return dev.sum() / (freq.sum() - 1)
def std_(val, freq):
return np.sqrt(var_(val, freq))