假设以下内容:
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中吗?
答案 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)]