python - 是否有一个 numpy 函数可以用另一个数组的相同部分替换一个数组
问题描述
我有两个图像存储为 numpy 数组。我正在寻找一个函数,它可以用相同的索引替换array2
具有黑色像素 ( ) 的部分。到目前为止,我的代码是非 numpy 的:[0, 0, 0]
array1
for y in range(array2.shape[0]):
for x in range(array2.shape[1]):
if np.all(array2[y, x]) == False:
array2[y, x] = array1[y, x]
代码循环遍历每个像素array2
以查看所有通道是否为 0(黑色),如果是,则array1
将该索引处的颜色复制到array2
.
这显然非常慢,因为它循环了很多不是黑色的像素并且对它们没有影响。我假设 numpy 有一个可以做到这一点的功能,但我不明白他们做了什么。感谢任何指导(有或没有 numpy)。
解决方案
这是你想要的吗?(我假设没有负值。)(编辑:但请参阅 Adam.Er8 的评论以解除此限制)
>>> arr1
array([[[1, 1, 1],
[2, 2, 2],
[3, 3, 3]],
[[4, 4, 4],
[5, 5, 5],
[6, 6, 6]],
[[7, 7, 7],
[8, 8, 8],
[9, 9, 9]]])
>>> arr2
array([[[1, 0, 0],
[0, 1, 0],
[0, 0, 1]],
[[1, 0, 0],
[0, 1, 0],
[0, 0, 0]],
[[1, 0, 0],
[0, 0, 0],
[0, 0, 0]]])
>>> idx = arr2.sum(axis=2) == 0
>>> idx
array([[False, False, False],
[False, False, True],
[False, True, True]])
>>> arr2[idx] = arr1[idx]
>>> arr2
array([[[1, 0, 0],
[0, 1, 0],
[0, 0, 1]],
[[1, 0, 0],
[0, 1, 0],
[6, 6, 6]],
[[1, 0, 0],
[8, 8, 8],
[9, 9, 9]]])
推荐阅读
- mongodb - Mongo $sort 和 $count 在新版本中变得更糟
- firebase - ERR_CONNECTION_REFUSED - 本地主机:8080,firebaseID 似乎涉及
- c# - HttpClient Get请求与Body有错误C#
- database - 使用 globalize 翻译种子文件
- oracle - 如果我在 oracle 网络管理器中仅设置网络加密或网络完整性会发生什么?
- c - 使用 isalpha 和 isdigit 时将带符号整数操作数与二进制位运算符一起使用
- arrays - 如何从Mongo中的数组数组中提取元素
- r - 从我的结果中删除 tryCatch 代码
- php - 如何重定向文件以在 header.php 中执行
- c# - 如何在不刷新页面的情况下显示每秒更改的值?