python - 在没有 for 循环的情况下更改特定索引处的大型数组中的条目
问题描述
我尝试将二维列表中的特定条目设置为自身的最大值和另一个值。在以下示例中,img 表示由 cv2.imread 读取的图像。msk 是一个相同维度的布尔数组。如果 value > 特定条目,我想将 img 的所有条目(msk 为 True)设置为 value。即使 value 小于上一个条目,以下示例始终将其设置为 value。
img[msk] = value
就像是
img[msk] = max(img[msk], value)
不起作用。
用两个 for 循环解决它需要更多时间,因为 img 代表一个巨大的图像(大约 20000x10000 pxls)
非常感谢你的帮助!
解决方案
这是你的问题,我会假设这value
是一个列表,否则它不会是二维的。
现在将 Value 作为列表,您无法比较max(img(msk),value)
,因为两者都是列表,或者如果 value 不是,则为 1。如果是这种情况,您可能的意思是max(img[msk])
或者 value 是列表max(img[msk]+value)
,或者最后如果 value 是 int ,max(img[msk]+[value])
.
PS我假设很多事情,因为你有点不清楚。如果我说错了,请在评论中纠正我。
编辑:根据下面的 OP 评论,问题是相似的,你不能做一个数组的最大值。这是一个解决方案,不确定迭代是否更昂贵,但不使用它。
首先做第一个最大值
img[msk] = value
然后创建第二个最大值,如果它还没有被屏蔽,并且它小于该值,它基本上只有 True。
msk2 = img<value
最后申请第二个msk
img[msk2] = value
这是一个例子
import numpy as np
img = np.array([[1,20],[3,4]])
msk = np.array([[True,False],[False,True]])
value = 7
img[msk]= value
# [[7,20],[3,7]]
msk2 = img < value
img[msk2] = value
#[[7,20],[7,7]]
推荐阅读
- php - PHP登录和注册 - 数据未插入数据库(PostgreSQL)
- python - 我的数组没有保存我给它的值,有什么解决办法吗?Python
- python - 如何将二维数组中的零更改为一?
- opengl - 在OpenGL中围绕移动点旋转对象
- pandas - 为什么 /numpy/core/fromnumeric.py 在应用 SimpleImputer 时会引发“RuntimeWarning:reduce 中遇到的无效值”?
- reactjs - 如何使用 ref 创建一个元素,然后将其附加为子元素
- selenium - WebScrape A Field - Selenium/BeautifulSoup
- php - 如何将数字转换为星期几的名称?
- powershell - 使用Powershell删除文件夹中多个csv文件中的空行
- javascript - 在 Firebase 上部署后 API 无法正常工作