了解np.bitwise_and的行为

时间:2015-08-11 10:51:42

标签: python numpy bitwise-operators

请考虑以下示例代码:

rand2 = np.random.rand(10)
rand1 = np.random.rand(10)
rand_bool = np.asarray([True, False, True, True, False, True, True, False, False, True], dtype=np.bool)
a = np.bitwise_and(rand1 > .2, rand2 < .9, rand_bool)
print(a)
b = np.bitwise_and(rand1 < .2, rand2 > .9, rand_bool)
print(a)

我的电脑上的输出(Python 3.4)是:

[ True False  True  True  True False  True  True  True  True]
[False False False False False False False False False False]

我不明白为什么为变量bitwise_and分配另一个b会更改变量a。此外,测试a is b会返回True。任何人都可以向我解释这种行为吗?非常感谢!

1 个答案:

答案 0 :(得分:2)

bitwise_and的第三个参数是可选的。它指定用于存储结果的输出数组。给出它时,它也是rand_bool的返回值。您在bitwise_and的两次调用中使用了相同的数组rand_bool[:] = np.bitwise_and(rand1 > .2, rand2 < .9) # Put the result in rand_bool a = rand_bool # Assign a to rand_bool rand_bool[:] = np.bitwise_and(rand1 > .2, rand2 < .9) # Put the result in rand_bool b = rand_bool # Assign b to rand_bool ,因此他们都将结果写入该数组并返回该值。

换句话说,您的代码等同于:

{{1}}