>假设我有一个 2D RGB 数组,显示为:
[[[ 0. 0. 0.5]
[ 0.5 0. 0.5]
[ 0. 0. 0.5]
...,
[ 0.5 0. 0.5]
[ 0. 0. 0.5]
[ 0. 0. 0.5]]]
我想将R
和B
列中的各个元素添加到数组的G
部分,使其看起来像:
[[[ 0. 0.5 0.5]
[ 0.5 1.0 0.5]
[ 0. 0.5 0.5]
...,
[ 0.5 1.0 0.5]
[ 0. 0.5 0.5]
[ 0. 0.5 0.5]]]
解决此问题的最简单方法是什么?
我会在numpy.array
中转换您的列表列表,然后将其切片。
import numpy as np
a=np.array([[ 0. , 0. , 0.5],
[ 0.5, 0. , 0.5],
[ 0. , 0. , 0.5]])
a[:,1] += a[:,0] + a[:,2]
print(a)
输出:
array([[ 0. , 0.5, 0.5],
[ 0.5, 1. , 0.5],
[ 0. , 0.5, 0.5]])
你可以使用
arr[...,1] = arr[...,0] + arr[...,2]
或者也许更易读,
R, G, B = arr[...,0], arr[...,1], arr[...,2]
G[:] = R + B
因为G
是arr
的基本切片,所以它是一个视图。修改视图会修改原始数组。 这分配G[:] = ...
修改G
就地。所以作业修改了arr
.
import numpy as np
arr = np.array([[[ 0., 0., 0.5],
[ 0.5, 0., 0.5],
[ 0., 0., 0.5],
[ 0.5, 0., 0.5],
[ 0., 0., 0.5],
[ 0., 0., 0.5]]])
R, G, B = arr[...,0], arr[...,1], arr[...,2]
G[:] = R + B
print(arr)
收益 率
[[[ 0. 0.5 0.5]
[ 0.5 1. 0.5]
[ 0. 0.5 0.5]
[ 0.5 1. 0.5]
[ 0. 0.5 0.5]
[ 0. 0.5 0.5]]]