我有一个2D numpy lambda函数数组。每个函数都有2个参数并返回一个浮点数。
将相同的2个参数传递给所有这些函数并获得一大堆答案的最佳方法是什么?
我尝试过类似的事情:
np.reshape(np.fromiter((fn(1,2) for fn in np.nditer(J,order='K',flags=["refs_ok"])),dtype = float),J.shape)
使用参数J
评估(1,2)
中的每个函数(J
包含函数)。
但是看起来房子很圆,也不太合适...... 有没有办法做到这一点?
A = J(1,2)
不起作用!
答案 0 :(得分:1)
您可以使用列表推导:
Collection::macro('dotflatten', function () {
return ....
});
这适用于numpy数组和列表列表。
答案 1 :(得分:0)
我认为没有一种非常干净的方式,但这种方法相当干净且有效:
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]])