2013-05-07 181 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