iPython numpy - 如何使用映射更改数组切片的值
iPython numpy - How to change value of an array slice with a map
我有一个 3 维数组 [行][列][3],其值介于 0 和 X 之间。
我需要操作数组中的特定维度。所以我截取了一部分我想操作的部分
arr_slice = 数组[:,:,0]
现在我可以进行一些操作,例如 arr_slice *= 3,这将改变原始数组,如我所愿。
但是,我需要根据映射更改值,该映射是一个大小为 X 的数组,它将切片 (0-X) 的值映射到新值。该地图称为映射
所以我知道映射[arr_slice] 会做我想做的事,但像这样使用它:
arr_slice = 映射[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
您需要解决切片元素:
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])
我有一个 3 维数组 [行][列][3],其值介于 0 和 X 之间。 我需要操作数组中的特定维度。所以我截取了一部分我想操作的部分
arr_slice = 数组[:,:,0]
现在我可以进行一些操作,例如 arr_slice *= 3,这将改变原始数组,如我所愿。
但是,我需要根据映射更改值,该映射是一个大小为 X 的数组,它将切片 (0-X) 的值映射到新值。该地图称为映射
所以我知道映射[arr_slice] 会做我想做的事,但像这样使用它: arr_slice = 映射[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
您需要解决切片元素:
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])