将参数传递给函数数组

时间:2018-04-13 11:25:10

标签: python-3.x numpy lambda

我有一个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)

不起作用!

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]])