我正在使用python / numpy。作为输入数据,我有大量的值对(x,y)
。我基本上想要绘制<y>(x)
,即某个数据仓y
的{{1}}的平均值。目前我使用普通的x
循环来实现这一点,这非常慢。
for
是否有可能为它进行一种矢量化写作?
答案 0 :(得分:14)
你不必要地使事情复杂化。您需要知道的是,对于x
中的每个bin,n
,sy
和sy2
,y
中的x
值的数量y
1}} bin,这些>>> n, _ = np.histogram(x, bins=xbins)
>>> sy, _ = np.histogram(x, bins=xbins, weights=y)
>>> sy2, _ = np.histogram(x, bins=xbins, weights=y*y)
值的总和,以及它们的平方和。你可以将它们作为:
>>> mean = sy / n
>>> std = np.sqrt(sy2/n - mean*mean)
从那些:
{{1}}
答案 1 :(得分:1)
如果你可以使用熊猫:
import pandas as pd
xedges = np.linspace(x.min(), x.max(), xbins+1)
xedges[0] -= 0.00001
xedges[-1] += 0.000001
c = pd.cut(x, xedges)
g = pd.groupby(pd.Series(y), c.labels)
mean2 = g.mean()
std2 = g.std(0)