numpy 广播和条件

numpy broadcasting and conditionals

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

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

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

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

有没有一种方法可以让我这样写 fg 这两个函数只在需要时计算,而不是在任何地方计算?这里我有 2 个值,但在应用程序中我有数百个,而且这些函数很昂贵。

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 或任何合适的方式。