我有一段简单的代码,我试图比较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)
查找 文件 的 logical_and
我们发现它只比较了两个数组,而第三个参数是用来将结果存储在不同的数组中。你可以使用 reduce
以避免不得不写入对 logical_and
所以,你想做的事情最后看起来就像
np.logical_and.reduce((red_mask, green_mask, blue_mask))