NumPy/SciPy如何实现广义累积函数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (26)

在numpy或spy(或其他库)中是否有一个函数将累积和和的概念推广到任意函数。例如,考虑(理论)函数

cumf( func, array) 

func是一个函数,它接受两个浮点数,并返回一个浮点数。特殊情况

lambda x,y: x+y 

lambda x,y: x*y 

分别是cumsum 和 cumprod。例如,如果

func = lambda x,prev_x: x^2*prev_x 

我把它应用于:

cumf(func, np.array( 1, 2, 3) )
np.array( 1, 4, 9*4 )
提问于
用户回答回答于

NumPy‘saccumulate():

In [22]: np.multiply.accumulate([[1, 2, 3], [4, 5, 6]], axis=1)
Out[22]: 
array([[  1,   2,   6],
       [  4,  20, 120]])

不幸的是,打电话accumulate()在...上frompyfunc()‘ed Python函数失败时出现了一个奇怪的错误:

In [32]: uadd = np.frompyfunc(lambda x, y: x + y, 2, 1)

In [33]: uadd.accumulate([1, 2, 3])
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)

ValueError: could not find a matching type for <lambda> (vectorized).accumulate, 
            requested type has type code 'l'

这是在Python2.7.3中使用NumPy1.6.1。

用户回答回答于

上面的ValueError仍然是一个使用Numpy 1.9.1(使用Python2.7.9)的bug。https://groups.google.com/forum/#!topic/numpy/JgUltPe2hqw

In [34]: uadd = np.frompyfunc(lambda x, y: x + y, 2, 1)

In [35]: uadd.accumulate([1,2,3], dtype=np.object).astype(np.int)
Out[35]: array([1, 3, 6])

扫码关注云+社区