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

问题描述 投票:0回答:1

我有一段简单的代码,我试图比较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)
python numpy boolean output
1个回答
0
投票

查找 文件logical_and我们发现它只比较了两个数组,而第三个参数是用来将结果存储在不同的数组中。你可以使用 reduce 以避免不得不写入对 logical_and所以,你想做的事情最后看起来就像

np.logical_and.reduce((red_mask, green_mask, blue_mask))
© www.soinside.com 2019 - 2024. All rights reserved.