选择numpy中的列

时间:2017-08-02 19:46:31

标签: arrays numpy

假设有一个索引和一个矩阵L

>>> index
(array([0, 2, 3, 3]), array([0, 2, 2, 3]))
>>> L
array([[  1,  -1,  -5, -10],
   [-15,   0,  -1,  -5],
   [-10, -15,  10,  -1],
   [ -5, -10,   1,  15]])

我想根据索引[1]选择列,我尝试过:

>>> L[:,index[1]]
array([[  1,  -5,  -5, -10],
   [-15,  -1,  -1,  -5],
   [-10,  10,  10,  -1],
   [ -5,   1,   1,  15]])

但结果不是我预期的,我的期望是:

>>> for i in index[1]:
...     print L[:,i]
[  1 -15 -10  -5]
[-5 -1 10  1]
[-5 -1 10  1]
[-10  -5  -1  15]

如何在没有for循环的情况下获得预期结果?为什么这个意想不到的结果出来了?感谢。

1 个答案:

答案 0 :(得分:3)

您只需要transpose

L[:,index[1]].T
#             ^ transpose

通过使用转置,列是行,反之亦然。所以在这里(您可以在选择之前进行转置,然后使用L.T[index[1],:])我们首先进行选择,然后将列转换为行。

这会产生:

>>> L[:,index[1]].T
array([[  1, -15, -10,  -5],
       [ -5,  -1,  10,   1],
       [ -5,  -1,  10,   1],
       [-10,  -5,  -1,  15]])

请注意,窗帘背后当然还有一些循环。但这些都是在Python之外完成的,因此效率更高。