假设我有一个包含三个函数的列表:f_list = [f1,f2,f3]和一个值数组,其中每个函数都应该被评估values = numpy.array([1,2,3])这样我就得到了 f1(1)、f2(2) 和 f3(3)。一种方法当然是循环函数:for i in range(3):
print(f_list[i](values[i])有没有更有效的方法来做到这一点?类似于 numpy 数组操作的东西,我可以一次传递所有值以获取函数评估数组?据我所知,我不能将函数存储在 numpy 数组中,可以吗?就我而言,我有一个非常大的 scipy 插值 (interp1d) 函数(或调用对象)的 2D 列表,在两个轴上循环时需要很长时间来评估。
2 回答
PIPIONE
TA贡献1829条经验 获得超9个赞
对于任意Python 函数,Python 级别的循环是不可避免的。一种方法是通过列表理解:
f_list = [f1,f2,f3]
values = np.array([1,2,3])
res = np.array([func(val) for func, val in zip(f_list, values)])
请记住,NumPy 不是将普通函数转换为向量化函数的高阶函数工具。Evennp.vectorize只不过是一个 Python 级别的循环。要矢量化您的计算,您需要依次考虑每个函数并编写一些逻辑(如果确实可以矢量化)。
江户川乱折腾
TA贡献1851条经验 获得超5个赞
如果它们按顺序排列,则此代码将起作用:
def a ( parameter ):
print ( parameter )
def b ( parameter ):
print ( parameter )
def c ( parameter ):
print ( parameter )
f_list = [a, b, c]
v_list = [1, 2, 3]
for index, function in enumerate ( f_list ):
function ( v_list [ index ] )
添加回答
举报
0/150
提交
取消