2016-11-22 27 views
0

我有一个3-dim数组[行] [cols] [3],其值介于0和X之间。 我需要操作特定的维度在数组中。所以,我已经采取了我想要操纵iPython numpy - 如何使用地图更改数组切片的值

arr_slice =阵列的部分切片[:,:,0]

现在我可以做一些操作像arr_slice * = 3,这将改变原来的数组,正如我打算的那样。

但是,我需要根据映射更改值,该映射是一个大小为X的数组,将slice(0-X)的值映射到新值。地图称为映射

,所以我知道映射[arr_slice]会做我想做的,但使用它是这样的: arr_slice =映射[arr_slice] 当然会改变的只有arr_slice而不是原来的数组我有。

那么,如何执行此任务来更改原始数组?

的数组实际上是一个形象,我试图操纵它的Y值在YIQ格式:

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

添加一个案例? – Divakar

回答

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]) 
+0

谢谢,这正是我所寻找的 – Yoavhayun