2012-08-04 115 views
2

以下腳本根據列表中包含的顏色漸變創建RGB數組。數組「捲心菜」的元素是「黃瓜」列表的索引。下面的腳本創建一個與'cabbage'形狀相同的數組'花椰菜',但其索引被替換爲來自'黃瓜'的相應元組。 Numpy有沒有更直接的方法來執行這個程序?以元素作爲其他對象索引的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)]] 

回答

0

numpy的支持fancy indexing

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

這是我的第一個想法 - 但它不符合的是相同的形狀... – 2012-08-04 15:39:47

+0

形狀可要求(3,3,3- )而不是(3,3),但它仍然給我留下了深刻的印象!碰巧,我的圖像數組需要使用dtype ='uint8'作爲3d的PIL fromarray()函數。 – Naaaysmith 2012-08-04 17:08:14