【问题标题】:Order of numpy (logical_and vs '&') statements leads to different resultsnumpy (logical_and vs '&') 语句的顺序导致不同的结果
【发布时间】:2018-07-10 16:35:44
【问题描述】:

我有一段简单的代码,我试图在其中比较 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)

【问题讨论】:

  • 查看逻辑与的文档。第三个参数是 out 参数。
  • 跟进@MSeifert 的评论,np.logical_and.reduce((red_mask, green_mask, blue_mask)) 会如您所愿。
  • 非常感谢!
  • @fuglede 请将其作为答案 :) 此问题应标记为已回答。
  • @Y0da:是的,同意,完成

标签: python numpy boolean output


【解决方案1】:

logical_and 中查找the documentation,发现它只比较了两个数组,而第三个参数用于将结果存储在不同的数组中。你可以使用reduce 来避免写到logical_and 的调用,所以你想要做的最终看起来像

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

【讨论】:

    猜你喜欢
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 2013-08-12
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    相关资源
    最近更新 更多