numpy广播和条件

问题描述 投票:1回答:1

我敢肯定这个问题已经在某个地方问了,但是我没有正确的关键字来找到解决方案...

我的问题是改善以下代码:

I = np.array([True,False])
x = np.array([1,2])
result = f(x) * (1 - I) + g(x) * I

事实上,I用作条件:如果我为True,则做第一件事,否则做第二件事。假定fg是(2,)->(2,)函数。

有没有一种我可以这样编写的方式,使得仅在需要时才计算两个函数fg,而不是到处都没有?在这里,我有2个值,但是在应用程序中,我有数百个,而功能太昂贵了。

python numpy conditional-statements broadcast
1个回答
0
投票

np.piecewise可能是您想要的。例如:

I = np.array([True,False])
x = np.array([1,2])
f,g = np.square,np.negative
np.piecewise(x, I, [g,f])
# array([-1,  4])
© www.soinside.com 2019 - 2024. All rights reserved.