generalized cumulative functions in NumPy/SciPy?
cumsum, numpy, python, scipy
Solution
NumPy's ufuncs have `accumulate()`:
In [22]: np.multiply.accumulate([[1, 2, 3], [4, 5, 6]], axis=1)
Out[22]:
array([[ 1, 2, 6],
[ 4, 20, 120]])
Unfortunately, calling `accumulate()` on a `frompyfunc()`'ed Python function fails with a strange error:
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'
This is using NumPy 1.6.1 with Python 2.7.3.
Problem
Is there a function in numpy or scipy (or some other library) that generalizes the idea of cumsum and cumprod to arbitrary function. For example, consider the (theoretical) function ``` cumf( func, array) ``` func is a function that accepts two floats, and returns a float. Particular cases ``` lambda x,y: x+y ``` and ``` lambda x,y: x*y ``` are cumsum and cumprod respectively. For example, if ``` func = lambda x,prev_x: x^2*prev_x ``` and I apply it to: ``` cumf(func, np.array( 1, 2, 3) ) ``` I would like ``` np.array( 1, 4, 9*4 ) ```