2013-05-07 180 views
1

我該如何做明智的索引二維數組列。例如 -Python索引二維數組

array([[ 0, 1, 2, 3, 4], 
    [ 5, 6, 7, 8, 9], 
    [10, 11, 12, 13, 14], 
    [15, 16, 17, 18, 19], 
    [20, 21, 22, 23, 24], 
    [25, 26, 27, 28, 29], 
    [30, 31, 32, 33, 34], 
    [35, 36, 37, 38, 39], 
    [40, 41, 42, 43, 44], 
    [45, 46, 47, 48, 49]]) 

這是一個二維數組。我可以通過使用a[:,0]來獲得列明智,這將給我第一列。但是,如果我想在同一時間閱讀所有列,並要挑值例如

[5] 

[10][15] 

[20][25][37] 

那麼就應該選擇像值

20 

45, 21 

46,22, 33 

我知道那一定是容易的。但我正在學習這些東西。

回答

2

如果你想要[5]給出20,你必須從1開始計數。由於Python從0開始計數,這是一個習慣現在打破:它只會引起頭痛。

我不知道你想要的輸出格式,因爲numpy的不支持衣衫襤褸的數組,但也許

>>> idx = np.array([5, 10, 15, 20, 25, 37]) 
>>> a.T.flat[idx-1] 
array([20, 45, 21, 46, 22, 33]) 

就足夠了?在這裏,我必須接受轉置,將其視爲平面數組,然後從索引中減去1以匹配您似乎計算的方式。

我們可以用一個列表,而不是一個數組(但後來我們就需要做一個listcomp什麼減去1秒。)例如:

>>> a.T.flat[[4, 9, 14, 19, 24, 36]] 
array([20, 45, 21, 46, 22, 33]) 
+0

謝謝您的回答。在我仍然學習的時候,轉置,平面陣列對我來說是新事物。我會盡力瞭解他們。 – haq 2013-05-07 10:46:21

+1

爲了清楚起見,'flat'不是一個視圖,而是一個迭代器(雖然支持幻想索引)。如果你想在不復制副本的情況下將數組本身作爲一維對象(或者更一般地說,'reshape()')來玩,你可以使用'ravel()'返回一個真正的視圖。 – 2013-05-07 10:55:27

+0

@HenryGomersall:啊,我甚至都沒有想過這個。我的意思是「觀點」是「認爲它」,「把它看作是」,這是一個不幸的選擇,因爲「觀點」在一個蓬鬆的背景下具有技術含義。 – DSM 2013-05-07 10:57:38