Python 使用元素作为其他对象索引的Numpy数组

Python 使用元素作为其他对象索引的Numpy数组,python,numpy,Python,Numpy,下面的脚本从列表中包含的颜色渐变创建RGB数组。数组“colla”的元素是列表“cumber”的索引。下面的脚本创建了一个数组“cauliflower”,其形状与“colla”相同,但索引替换为“cucumber”中相应的元组。Numpy是否有更直接的方法来执行此程序 from numpy import array, shape, zeros cabbage = array([[0,3,2],[3,2,1],[3,1,0]]) cucumber=[(0,100,0),(0,150,0),(0,

下面的脚本从列表中包含的颜色渐变创建RGB数组。数组“colla”的元素是列表“cumber”的索引。下面的脚本创建了一个数组“cauliflower”,其形状与“colla”相同,但索引替换为“cucumber”中相应的元组。Numpy是否有更直接的方法来执行此程序

from numpy import array, shape, zeros

cabbage = array([[0,3,2],[3,2,1],[3,1,0]])
cucumber=[(0,100,0),(0,150,0),(0,200,0),(0,255,0)]
rows ,cols = shape(cabbage)
cauliflower = zeros((rows,cols),dtype=object)

for row in range(rows):
    for col in range(cols):
        cauliflower[row,col]=cucumber[cabbage[row,col]]

print cauliflower
[[(0, 100, 0) (0, 255, 0) (0, 200, 0)]
[(0, 255, 0) (0, 200, 0) (0, 150, 0)]
[(0, 255, 0) (0, 150, 0) (0, 100, 0)]]
Numpy支持:

Numpy支持:


这是我的第一个想法-但它不符合相同形状的要求…形状可能是(3,3,3)而不是(3,3),但它仍然让我印象深刻!碰巧的是,我的图像数组需要是3d的,对于PIL fromarray()函数,dtype='uint8'。这是我的第一个想法-但它不满足相同形状的要求…形状可能是(3,3,3)而不是(3,3),但它仍然让我印象深刻!碰巧,对于PIL fromarray()函数,我的图像数组需要是三维的,dtype='uint8'。
>>> from numpy import array, shape, zeros
>>> cabbage = array([[0,3,2],[3,2,1],[3,1,0]])
>>> cucumber=array([(0,100,0),(0,150,0),(0,200,0),(0,255,0)])
>>> cucumber[cabbage]
array([[[  0, 100,   0],
        [  0, 255,   0],
        [  0, 200,   0]],

       [[  0, 255,   0],
        [  0, 200,   0],
        [  0, 150,   0]],

       [[  0, 255,   0],
        [  0, 150,   0],
        [  0, 100,   0]]])