在numpy中,pythonic改变一个通道的值的方法
假设我有一个形状为
(960,1920,4)
像这样的价值观
[[[ 0 60 0 0]
[ 0 100 0 1]]
[[ 0 100 0 1]
[ 0 40 0 0]]]
将第四个通道中的 1 更改为 255 的 Pythonic 方法是什么?(我可以用一些循环来做,但我怀疑这需要时间,而不是最好的方法)
我希望获得的结果是
[[[ 0 60 0 0]
[ 0 100 0 255]]
[[ 0 100 0 255]
[ 0 40 0 0]]]
注意:我想在这种情况下可以进行一些乘法运算,那没问题,但是如果我有多个非零值而不是全 1 并且想将它们转换为 255 呢?
回答
高级索引和分配:
a[a[...,3] == 1, 3] = 255
a
[[[ 0 60 0 0]
[ 0 100 0 255]]
[[ 0 100 0 255]
[ 0 40 0 0]]]
注意这里我们使用组合的布尔索引a[...,3] == 1和整数索引3来定位需要修改的位置。该案例记录在boolean array indexing 下。
在这种情况下,组合索引等效于以下元组:
(a[..., 3] == 1).nonzero() + (3,)