2013-03-16 44 views
3

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

我想要做的是根据修饰符数组中的值更改二进制值。这里有一个代码段工作得很好,并封装了两个内什么,我试图做的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循环,但比较和布尔逻辑使我认为这可能是最好的方式。

回答

6
binaries &= ~(modifier > 0.2) 

modifiler > 0.2创建二进制数组,~操作者确实布尔没有,&=确实布尔and

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

+0

不错。谢谢。我不知道&=操作符。 – Nick 2013-03-16 00:50:59

+3

+1我认为将'False'分配给符合条件的项目会更快,即'binaries [modifier> 0.2] = False',而不是'&' - 这两个数组,但您的答案快大约10倍。如果你执行'binaries&= modifier <= 0.2',它当然会更快一些。 – Jaime 2013-03-16 01:01:21

+0

聪明答案+1 – 2013-03-16 01:08:43