gpt4 book ai didi

python - [x](y) 运算符到底是做什么的?

转载 作者:行者123 更新时间:2023-12-03 23:38:56 24 4
gpt4 key购买 nike

我的目标是逐像素评估图像。代替:

count = 0
for x in range(w):
for y in range(h):
pixel_1, pixel_2 = img_1[x, y], img_2[x, y]
if pixel_1 == 0 and pixel_2 == 0:
count += 1
我已经看到了一种使用 [] 和 () 运算符来做到这一点的方法:
sum((img_1 == 0)[img_2 == 0])
我试图理解这意味着什么。我一直在尝试寻找它,但我不知道描述它的正确术语。我也试图一次将它应用于三个图像:
sum((img_1 == 0)[img_2 == 0 and img_3 == 0])
但这不起作用。任何帮助,将不胜感激。提前致谢。

最佳答案

在这条线上发生了很多事情:

sum((img_1 == 0)[img_2 == 0])
第一, img_1 == 0是一个返回 1 的 numpy 数组的操作,其中 imp_1不为零,否则为 0。试着打印出来看看。该数组的保存大小为 img_1 .括号内的操作与img_2的操作基本相同。
这里,在 True 中有 0 的地方有 1(相当于 a1) :
a1 = np.arange(2*3).reshape(2, 3)
# array([[0, 1, 2],
# [3, 4, 5]])

a1 == 0
# array([[ True, False, False],
# [False, False, False]])
img_1 == 0周围的括号仅在此处以便以下索引操作(由括号实现)适用于 img_1 == 0 的结果而不是到 0数字。 .它不是一种操作,而是一种对某些操作进行分组和优先处理的手段(请参阅@hpaulj 评论)。
所涉及的最后一个操作——由括号实现的操作——是索引操作。首先注意 (img_1 == 0)img_2 == 0大小相同(考虑到两个图像的大小相同)。 此操作仅检索来自 (img_1 == 0) 的元素哪里有 0 in img_2 . 这根据括号内指定的索引从数组中“选择”元素。
这里在 a 中有三个 1在不同的位置。该操作仅检索 a 中的元素哪里 a == 1是真的,所以它返回三个:
a = np.array([[1, 2, 1], [3, 1, 4]])
a[a == 1]
# array([1, 1, 1])
这个求和操作不是最容易理解的形式,你可以在你的 3-image 案例中使用这个:
((img1 == 0) & (img2 == 0) & (img3 == 0)).sum()
这读起来很好:“创建一个包含 1 的 1 和 0 的 numpy 数组,其中 imag1 中有 0 并且 img2 中有 0 和 ...,然后对这个数组求和”。

关于python - [x](y) 运算符到底是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67200293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com