【问题标题】:numpy broadcasting and conditionalsnumpy 广播和条件
【发布时间】:2020-02-29 15:26:42
【问题描述】:

我确信这个问题已经在某个地方提出过,但我没有正确的关键字来找到解决方案...

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

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 个值,但在应用程序中我有数百个并且这些函数很昂贵。

【问题讨论】:

  • 如果我正确理解了文档,numpy.where 不会在不需要时避免计算 g(x):它会计算所有内容然后选择。所以这就是我需要的......
  • gf(2,)(2,) 是什么意思?如果我理解正确,您希望他们每个人在示例中只处理一个输入,对吧?

标签: python numpy conditional-statements broadcast


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多