【问题标题】:How to use a boolean array to skip expensive calculations of elements in array?如何使用布尔数组跳过数组中元素的昂贵计算?
【发布时间】:2019-12-27 01:22:05
【问题描述】:

在 numpy 中有没有办法使用布尔数组来跳过对数组中某些元素的计算?只要bool_arr 中的对应元素是False,我希望它跳过对expensive * arr 的评估。

  results = bool_arr & (expensive * arr)

此代码不会短路,and 运算符不适合,因为它不按元素进行评估,numpy 中是否有另一种优雅的解决方案?

【问题讨论】:

    标签: numpy numpy-ndarray short-circuiting


    【解决方案1】:

    您可以使用bool_arr 处理数组的一个子集,因为expensive 可以因此运行在一小组值上,例如:

    results = bool_arr
    results[bool_arr] = expensive * arr[bool_arr]

    【讨论】:

    • 一些ufunc 采用outwhere 参数来进行这种屏蔽。我还没有研究相对速度优势。
    猜你喜欢
    • 2012-07-28
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    相关资源
    最近更新 更多