python / numpy中矩阵的条件求和

时间:2012-03-20 19:58:13

标签: python algorithm numpy

我有两个numpy数组XW,每个数组的形状(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的整个范围)求和,我需要对许多不同的矩阵XW执行此操作。分析确定这是瓶颈。我现在正在做的事情是:

W_total = []
for v0, v1 in zip(X, X[1:]):
    idx = (X>=x0) & (X<x1)
    W_total.append( W[idx].sum() )

如何加快速度?

2 个答案:

答案 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)