我有两个numpy数组X
和W
,每个数组的形状(N,N)
都来自计算结束。将X
的范围细分为等间隔[min(X), min(X)+delta, min(X)+2*delta,..., max(X)]
。我想知道,给定间隔起点v
,相应W
值的总和:
idx = (X>=v) & (X<(v+delta))
W[idx].sum()
我需要为所有起始间隔(即X
的整个范围)求和,我需要对许多不同的矩阵X
和W
执行此操作。分析确定这是瓶颈。我现在正在做的事情是:
W_total = []
for v0, v1 in zip(X, X[1:]):
idx = (X>=x0) & (X<x1)
W_total.append( W[idx].sum() )
如何加快速度?
答案 0 :(得分:1)
您可以使用numpy.histogram()
在一次操作中计算所有这些总和:
sums, bins = numpy.histogram(
X, bins=numpy.arange(X.min(), X.max(), delta), weights=W)
答案 1 :(得分:1)
你试过numpy.histogram吗?
nbins = (X.max() - X.min()) / delta
W_total = np.histogram(X, weights=W, bins=nbins)