python - 替换 Numpy 数组中的多个值
问题描述
给定以下示例数组:
import numpy as np
example = np.array(
[[[ 0, 0, 0, 255],
[ 0, 0, 0, 255]],
[[ 0, 0, 0, 255],
[ 221, 222, 13, 255]],
[[-166, -205, -204, 255],
[-257, -257, -257, 255]]]
)
我想用值替换值[0, 0, 0, 255]
,[255, 0, 0, 255]
其他一切都变为[0, 0, 0, 0]
.
所以想要的输出是:
[[[ 255, 0, 0, 255],
[ 255, 0, 0, 255]],
[[ 255, 0, 0, 255],
[ 0, 0, 0, 0]],
[[ 0, 0, 0, 0],
[ 0, 0, 0, 0]]
这个解决方案接近了:
np.place(example, example==[0, 0, 0, 255], [255, 0, 0, 255])
np.place(example, example!=[255, 0, 0, 255], [0, 0, 0, 0])
但它改为输出:
[[[255 0 0 255],
[255 0 0 255]],
[[255 0 0 255],
[ 0 0 0 255]], # <- extra 255 here
[[ 0 0 0 0],
[ 0 0 0 0]]]
有什么好方法可以做到这一点?
解决方案
您可以找到所有出现的[0, 0, 0, 255]
using
np.all(example == [0, 0, 0, 255], axis=-1)
# array([[ True, True],
# [ True, False],
# [False, False]])
将这些位置保存到 a mask
,将所有内容设置为零,然后将所需的输出放入mask
位置:
mask = np.all(example == [0, 0, 0, 255], axis=-1)
example[:] = 0
example[mask, :] = [255, 0, 0, 255]
# array([[[255, 0, 0, 255],
# [255, 0, 0, 255]],
#
# [[255, 0, 0, 255],
# [ 0, 0, 0, 0]],
#
# [[ 0, 0, 0, 0],
# [ 0, 0, 0, 0]]])
推荐阅读
- excel - UsedRange.Rows.Count 显示的数字与实际数字不同
- java - InteliJ IDEA 开关等于零件
- javascript - 反应暗模式挂钩不在其他页面上进行更改
- python - 如何在没有 cvbridge 的情况下在 ros 上使用 opencv 发布图像主题
- shell - 在这个 shell 指南中。文档中的“和”是错误还是故意的?
- react-native - 在 react-native 中设置一个图像宽度为屏幕宽度和原始图像高度(LIKE INSTAGRAM)的高度
- java - 如何过滤弹簧数据中包括父级的层次结构?
- c++ - 谷歌基准排序算法
- discord.py - 无法修复 RuntimeError:使用语音需要 PyNaCl 库
- c# - 操作委托在调用时引发 NullReferenceException