【问题标题】:Optimizing Boolean Compares Between Arrays with Python使用 Python 优化数组之间的布尔比较
【发布时间】:2013-03-16 00:45:19
【问题描述】:

我有一些 Python 代码正在尝试优化。它处理两个相同大小的二维数组(它们的大小可以是任意的)。第一个数组包含任意布尔值,第二个数组包含 0 到 1 之间的半随机数。

我要做的是根据修饰符数组中的值更改二进制值。这是一个运行良好的代码 sn-p,它封装了我在两个 for 循环中尝试做的事情:

import numpy as np
xdim = 3
ydim = 4
binaries = np.greater(np.random.rand(xdim,ydim), 0.5)
modifier = np.random.rand(xdim,ydim)

for i in range(binaries.shape[0]):
    for j in range(binaries.shape[1]):
        if np.greater(modifier[i,j], 0.2):
            binaries[i,j] = False

我的问题:有没有更好(或更合适)的方法来做到这一点?我宁愿使用切片之类的东西而不是嵌套的 for 循环,但是比较和布尔逻辑让我认为这可能是最好的方法。

【问题讨论】:

    标签: python optimization numpy boolean-logic slice


    【解决方案1】:
    binaries &= ~(modifier > 0.2)
    

    modifiler > 0.2 创建一个二进制数组,~ 运算符不做布尔运算,&= 做布尔运算 and

    注意 ~ &= 是位运算符,但您可以将它们用作布尔运算符。

    【讨论】:

    • 不错。谢谢。我不知道 &= 运算符。
    • +1 我认为将False 分配给满足条件的项目会更快,即'binaries[modifier > 0.2] = False, than &-ing both arrays, but your answer is about 10x faster. It's of course a little faster if you do binaries &= modifier
    猜你喜欢
    • 1970-01-01
    • 2017-02-07
    • 2016-05-05
    • 2016-03-11
    • 2022-01-23
    • 2014-05-17
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    相关资源
    最近更新 更多