generalized cumulative functions in NumPy/SciPy? generalized cumulative functions in NumPy/SciPy? python python

generalized cumulative functions in NumPy/SciPy?


The ValueError above is still a bug using Numpy 1.20.1 (with Python 3.9.1).

Luckily a workaround was discovered that uses casting:https://groups.google.com/forum/#!topic/numpy/JgUltPe2hqw

import numpy as npuadd = np.frompyfunc(lambda x, y: x + y, 2, 1)uadd.accumulate([1,2,3], dtype=object).astype(int)# array([1, 3, 6])

Note that since the custom operation works on an object type, it won't benefit from the efficient memory management of numpy. So the operation may be slower than one that didn't need casting to object for extremely large arrays.


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.