2012-03-20 20 views
0

計算の終わりから得られる形状が(N,N)の2つのnumpy配列XWがあります。 Xの範囲を等間隔[min(X), min(X)+delta, min(X)+2*delta,..., max(X)]に細分します。私は、ポイントvを開始する間隔与えられ、対応するW値の合計を知りたい:Python/numpyの行列に対する条件付き和

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()) 

どのように私はこれをスピードアップできますか?

答えて

1

あなたは、単一の操作ですべてのそれらの合計を計算するためにnumpy.histogram()を使用することができます。

sums, bins = numpy.histogram(
    X, bins=numpy.arange(X.min(), X.max(), delta), weights=W) 
1

あなたはnumpy.histogramを試みたことがありますか?

nbins = (X.max() - X.min())/delta 
W_total = np.histogram(X, weights=W, bins=nbins)