Scipy / Numpy:多个指数的总和

时间:2012-10-04 23:13:54

标签: arrays numpy sum scipy nested-loops

假设我有一个表达式,我需要找到它的总和:

enter image description here

其中边界是有限的并且是已知的。在scipy / numpy中计算这样一笔总和的最快或最有效的方法是什么。它可以用嵌套的for循环完成,但有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

怎么样

np.dot(x[:amax], np.cumsum(y[:amax] * np.sum(z[cmin:cmax])))

答案 1 :(得分:2)

对于这些总和,

np.einsum也可能是一种选择。正如nevsan所示,对于由b限制的a,您需要先使用np.cumsum,而np.einsum在给定的示例中不应该更快。

它看起来像这样:

 y_acc = np.add.accumulate(y[:amax]) # same as cumsum
 result = np.einsum('i,i,j->', x[:amax], y_acc, z[cmin:cmax])

然而,这种情况会慢得多,因为einsum并没有优化z总和只需要进行一次这样的事实,所以你需要手工重新制定它:

result = np.einsum('i,i->', x[:amax], y_summed) * z[cmin:cmax].sum()

然而,在这种情况下应该比nevsan基于np.dot的方法慢,因为dot通常应该更好地优化(即。np.einsum(ii->, a, b)np.dot(a, b)慢。但是,如果你有更多的数组要总结,那么它可能是个不错的选择。