我有一个3-dim数组[rows] [cols] [3],其值介于0和X之间。 我需要操纵数组中的特定维度。所以我已经完成了我想要操作的部分
arr_slice = array [:,:,0]
现在我可以进行一些操作,比如arr_slice * = 3,这会改变原来的数组,就像我想的那样。
但是,我需要根据地图更改值,地图是一个大小为X的数组,它将切片(0-X)的值映射到新值。地图称为映射
所以我知道映射[arr_slice]会做我想要的,但是像这样使用它: arr_slice = mapping [arr_slice] 当然会改变arr_slice而不是我原来的数组。
那么,我该如何执行此任务来更改原始数组?
数组实际上是一个图像,我试图以YIQ格式操纵它的Y值:
im_eq = np.copy(im_orig)
if (rgb):
im_eq = rgb2yiq(im_eq)
im = im_eq[:,:,0]
else:
im = im_eq
mapping = get_cumutative_histogram(im)
im = mapping[im.astype(int)] # the problematic line
答案 0 :(得分:2)
您需要解决切片元素:
im[:] = mapping[im.astype(int)]
例如:
from pylab import *
a = rand(10)
sl = a[4:9]
print sl # ->: array([ 0.97278179, 0.7894741 , 0.38051133, 0.42684762, 0.82670638])
sl[:] = 1
print a #-> array([ 0.21125781, 0.4235981 , 0.81950229, 0.93937973, 1. , 1. , 1. , 1. , 1. , 0.39047808])