numpy(logical_and vs'&')语句的顺序导致不同的结果

时间:2018-07-10 16:35:44

标签: python numpy boolean output

我有一段简单的代码,试图将numpy函数logical_and与“&”运算符进行比较。

我遇到了一个非常奇怪的行为,即执行语句的顺序似乎对最终结果有影响,而实际上却不然。奇怪的!

在下面的代码中,如果我互换final_mask1和final_mask语句顺序,则会导致变量“ test”的值不同以及作为输出的图像不同。这是针对我将final_mask作为输出的情况。我在这里想念什么吗?我该如何解决? TIA

import numpy as np
from scipy import misc
import matplotlib.pyplot as plt
photo_data = misc.imread('./sd-3layers.jpg')
red_mask = photo_data[:, : ,0] < 150
green_mask = photo_data[:, : ,1] > 100
blue_mask = photo_data[:, : ,2] < 100

final_mask1 = np.logical_and(red_mask, green_mask, blue_mask)
final_mask = red_mask & green_mask & blue_mask

test = (final_mask1 == final_mask)
print(np.all(test))
photo_data[final_mask] = 0
plt.figure(figsize=(15,15))
plt.imshow(photo_data)

1 个答案:

答案 0 :(得分:0)

查找logical_and中的the documentation,发现它只比较两个数组,而第三个参数用于将结果存储在另一个数组中。您可以使用reduce来避免写对logical_and的调用,因此您尝试做的事情最终看起来像

np.logical_and.reduce((red_mask, green_mask, blue_mask))