![](/img/trans.png)
[英]NumPy sum one array based on values in another array for each matching element in 3rd array
[英]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.