Funciones acumuladas generalizadas en NumPy / SciPy?

¿Existe una función en numpy o scipy (o alguna otra biblioteca) que generalice la idea de cumsum y cumprod a una función arbitraria? Por ejemplo, considere la función (teórica)

cumf( func, array) 

func es una función que acepta dos flotantes y devuelve un flotador. Casos particulares

 lambda x,y: x+y 

y

 lambda x,y: x*y 

son cumsum y cumprod respectivamente. Por ejemplo, si

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

y lo aplico a:

 cumf(func, np.array( 1, 2, 3) ) 

Me gustaría

 np.array( 1, 4, 9*4 ) 

Los ufuncs de NumPy han accumulate() :

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

Desafortunadamente, al llamar frompyfunc() accumulate() en una función de Python ed de frompyfunc() un error extraño:

 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  (vectorized).accumulate, requested type has type code 'l' 

Esto está usando NumPy 1.6.1 con Python 2.7.3.

El ValueError anterior sigue siendo un error al usar Numpy 1.9.1 (con Python 2.7.9).

Afortunadamente, se descubrió una solución alternativa que utiliza la conversión: 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])