jit*_*u83 1 python numpy dataframe python-3.x
我有一个元组列表[(val1,freq1),(val2,freq2)....(valn,freqn)].我需要测量上述数据的中心趋势(平均值,中位数)和偏差度量(方差,均值).我还想绘制值的箱线图.
我看到numpy数组有直接的方法来从值列表中获得均值/中值和标准差(或方差).
numpy(或任何其他知名图书馆)是否有直接的手段在这样的频率分配表上运行?
另外,将上面的元组列表以编程方式扩展到一个列表的最佳方法是什么?(例如,如果freq dist是[(1,3),(50,2)],最好的方法是获得列表[1,1,1,50,50]来使用np.mean([1,1,1, 50,50]))
我在这里看到了一个自定义函数,但是如果可能的话我想使用标准实现
首先,我将这个凌乱的列表更改为两个numpy数组,如@ user8153:
val, freq = np.array(list_tuples).T
Run Code Online (Sandbox Code Playgroud)
然后你可以重建数组(使用np.repeat阻止循环):
data = np.repeat(val, freq)
Run Code Online (Sandbox Code Playgroud)
并在阵列上使用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[-1] // 2, cdf)]
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))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2376 次 |
| 最近记录: |