read not loadtxt float example could convert python numpy scipy cumsum

python - not - Funciones acumuladas generalizadas en NumPy/SciPy?



numpy loadtxt could not convert string to float (2)

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


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


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

Esto es usar NumPy 1.6.1 con Python 2.7.3.