python - [x](y) 运算符到底是做什么的?
问题描述
我的目标是逐像素评估图像。代替:
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
。这会根据括号内指定的索引从数组中“选择”元素。
这里有三个 1a
在不同的位置。该操作仅检索a
wherea == 1
为 true 的元素,因此它返回三个元素:
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 和 0 的 numpy 数组,其中 imag1 中有 0 并且 img2 中有 0 并且 ...,然后对这个数组求和”。
推荐阅读
- java - 我无法使暗/亮模式切换正常工作
- python - 如何在 django 中使用 panda 来规范化下面的 json
- sms - 在 vb.net 中使用 smart bro 插件发送批量短信
- flutter - 如何获取购物篮中所有商品的总价
- azure-data-explorer - 使用 kusto 查询语言每天或每月关闭多个虚拟机多长时间
- python - SQLAlchemy - 将动态表名传递给查询函数?
- visual-studio - 使用 Visual Studio 2019 进行调试时,dockerized lagacy NET 框架项目的命令行参数
- php - 如何将离子视频捕获移动到 php 中的 file_put_contents()
- mongodb - Mongodb shell find 过滤提取嵌入文本数据
- linux - 加密凭证