Python 3.x 将参数传递给函数数组
我有一个lambda函数的2D numpy数组。每个函数有2个参数并返回一个浮点 将相同的2个参数传递给所有这些函数并得到一个numpy数组答案的最佳方法是什么 我试过这样的方法:Python 3.x 将参数传递给函数数组,python-3.x,numpy,lambda,Python 3.x,Numpy,Lambda,我有一个lambda函数的2D numpy数组。每个函数有2个参数并返回一个浮点 将相同的2个参数传递给所有这些函数并得到一个numpy数组答案的最佳方法是什么 我试过这样的方法: np.reshape(np.fromiter((fn(1,2) for fn in np.nditer(J,order='K',flags=["refs_ok"])),dtype = float),J.shape) 使用参数(1,2)(J包含函数)计算J中的每个函数 但它似乎非常围绕房子,也不太工作。。。 有什么好
np.reshape(np.fromiter((fn(1,2) for fn in np.nditer(J,order='K',flags=["refs_ok"])),dtype = float),J.shape)
使用参数(1,2)
(J
包含函数)计算J
中的每个函数
但它似乎非常围绕房子,也不太工作。。。
有什么好办法吗
A = J(1,2)
不行 您可以使用列表理解:
A = np.asarray([[f(1,2) for f in row] for row in J])
这应该适用于numpy数组和列表列表 我认为没有一种真正干净的方法,但这种方法相当干净,而且有效:
import operator
import numpy as np
# create array of lambdas
a = np.array([[lambda x, y, i=i, j=j: x**i + y**j for i in range(4)] for j in range(4)])
# apply arguments 2 and 3 to all of them
np.vectorize(operator.methodcaller('__call__', 2, 3))(a)
# array([[ 2, 3, 5, 9],
# [ 4, 5, 7, 11],
# [10, 11, 13, 17],
# [28, 29, 31, 35]])
或者,稍微灵活一点:
from types import FunctionType
np.vectorize(FunctionType.__call__)(a, 2, 3)
# array([[ 2, 3, 5, 9],
# [ 4, 5, 7, 11],
# [10, 11, 13, 17],
# [28, 29, 31, 35]])
为什么这是一个数组?为什么不列出一份清单(或清单清单)?无论如何,它必须是一个对象数据类型数组,所以你不能对它做太多的数学运算。列表上的迭代速度更快。与显式循环相比,
vectorize
使2da
上的迭代更容易,但并没有提高速度。