iPython numpy - 如何使用地图更改数组切片的值

时间:2016-11-22 09:18:18

标签: arrays numpy ipython slice

我有一个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

1 个答案:

答案 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])