繁体   English   中英

如何将函数应用于numpy数组中的每个第3轴元素?

[英]How to apply a function to each 3rd axis element in a numpy array?

如果我有一个像这样的numpy数组:

[[[137 153 135]
  [138 154 136]
  [138 153 138]
  ..., 
  [134 159 153]
  [136 159 153]
  [135 158 152]]
  ...,
  [ 57  44  34]
  [ 55  47  37]
  [ 55  47  37]]]

如何对每个[000 000 000]条目应用一个函数,进行修改?

# a = numpy array
for x in a:
    for y in x:
        y = modify(y)

我想要实现的是修改PIL图像中的每个(r,g,b)像素,这些像素已转换为numpy数组。

一个简单的答案是

for row in a:
    for item in row:
        item[:] = modify(item)

但是,这并不是很有效。 一个有效的解决方案应避免Python在所有像素上循环。 (这就是NumPy的全部意义-向量化您的代码!)针对当前情况的向量化版本为

r, g, b = a[..., 0], a[..., 1], a[..., 2]
new_a = numpy.empty_like(a)
new_a.fill(255)
new_a[(r != a.max(axis=2)) | (r <= 125) | (g >= 70) | (b >= 110), 1:] = 0

y有您的rgb数组,不是吗?

for row in a:
    for px in row:
        px[0] = 255 - px[0]
        px[1] = 255 - px[1]
        px[2] = 255 - px[2]

或更一般而言:

for row in a:
    for px in row:
        n = modify(px)
        px[0] = n[0]
        px[1] = n[1]
        px[2] = n[2]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM