numpy广播和条件

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

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

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

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

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

lyxxzrb 回答:numpy广播和条件

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

一个潜在的陷阱:np.piecewise的输出与x的类型相同;因此,如果xint但产生float值,则这些值将被截断。为了避免将此X强制转换为float或其他合适的方式。

本文链接:https://www.f2er.com/3167604.html

大家都在问