NumPy/SciPy中的广义累积函数?

2024-10-01 17:33:31 发布

您现在位置:Python中文网/ 问答频道 /正文

在numpy或scipy(或其他一些库)中是否有一个函数可以将cumsum和cumprod的思想推广到任意函数。例如,考虑(理论)函数

cumf( func, array) 

func是一个接受两个float并返回一个float的函数。特殊情况

^{pr2}$

以及

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 )

Tags: lambda函数numpynp情况scipyfloat理论
2条回答

NumPy的ufunc有^{}

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

不幸的是,对frompyfunc()的Python函数调用accumulate()失败,并出现一个奇怪的错误:

^{pr2}$

这是使用Numpy1.6.1和Python2.7.3。在

上面的ValueError仍然是一个使用numpy1.17.2(使用python3.7.3)的bug。在

幸运的是,我们发现了一种使用铸造的解决方法: https://groups.google.com/forum/#!topic/numpy/JgUltPe2hqw

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

请注意,由于自定义操作在np.对象,它不会受益于numpy的高效内存管理。因此,对于非常大的数组,操作可能比不需要强制转换为对象的操作慢。在

相关问题 更多 >

    热门问题