3

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

我要做的是根据修饰符数组中的值更改二进制值。这是一个运行良好的代码片段,它封装了我在两个 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 循环,但是比较和布尔逻辑让我认为这可能是最好的方法。

4

1 回答 1

6
binaries &= ~(modifier > 0.2)

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

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

于 2013-03-16T00:48:25.980 回答