将函数数组按位置应用于元素数组

时间:2018-11-19 17:27:21

标签: python arrays numpy functional-programming numpy-ndarray

假设以下内容:

def x2(x):
    res=x*x
    return res

def tx(x):
    res=2*x
    return res

def x3(x):
    res=x*x*x
    return res

x=np.array([1,2,3])
f=np.array([x2,tx,x3])

我试图不使用for循环返回一个数组array([x2(1),tx(2),x3(3)])。 这可能在python中吗?

2 个答案:

答案 0 :(得分:1)

没有客观理由这样做,但是您可以这样做:

@np.vectorize
def apply(f,x) : return  f(x)

那么apply(f,x)现在是[1,4,27]

答案 1 :(得分:-1)

否,在 general 情况下,不可避免的是使用Python级的for循环。

但是您可以将其隐藏在map + lambda后面:

res1 = list(map(lambda x: x[0](x[1]), zip((x2, tx, x3), x)))
res2 = np.array([x2(1), tx(2), x3(3)])

assert np.array_equal(res1, res2)

当然,在这种情况下,建议使用列表理解:

res = [func(var) for func, var in zip((x2, tx, x3), x)]