在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,)


以上是在numpy中,pythonic改变一个通道的值的方法的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>