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,则执行第一件事,否则执行第二件事。 f
和 g
假设为 (2,) -> (2,) 函数。
有没有一种方法可以让我这样写 f
和 g
这两个函数只在需要时计算,而不是在任何地方计算?这里我有 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
的类型相同;因此,如果 x
是 int
但产生 float
值,则这些值将被截断。为了避免将 X
强制转换为 float
或任何合适的方式。
我敢肯定这个问题已经在某个地方被问过了,但是我没有合适的关键字来找到解决方案...
我的问题是改进以下代码:
I = np.array([True,False])
x = np.array([1,2])
result = f(x) * (1 - I) + g(x) * I
实际上,I
用作条件:如果 I 为 True,则执行第一件事,否则执行第二件事。 f
和 g
假设为 (2,) -> (2,) 函数。
有没有一种方法可以让我这样写 f
和 g
这两个函数只在需要时计算,而不是在任何地方计算?这里我有 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
的类型相同;因此,如果 x
是 int
但产生 float
值,则这些值将被截断。为了避免将 X
强制转换为 float
或任何合适的方式。