2016-11-22 9 views
0

У меня есть 3-мерный массив [rows] [cols] [3] со значениями между 0 и X. Мне нужно манипулировать определенным размером в массиве. Так что я взял кусок части я хочу, чтобы манипулироватьiPython numpy - Как изменить значение массива с помощью карты

arr_slice = Array [:,:, 0]

теперь я могу сделать некоторые манипуляции, как arr_slice * = 3, и что изменится исходный массив , как я и предполагал.

Однако мне нужно изменить значения в соответствии с картой, которая представляет собой массив с размером X, который отображает значения среза (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

 Смежные вопросы

  • Нет связанных вопросов^_^