Python 3.x 将参数传递给函数数组

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中的每个函数 但它似乎非常围绕房子,也不太工作。。。 有什么好

我有一个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
中的每个函数

但它似乎非常围绕房子,也不太工作。。。 有什么好办法吗

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
使2d
a
上的迭代更容易,但并没有提高速度。