假设有一个索引和一个矩阵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循环的情况下获得预期结果?为什么这个意想不到的结果出来了?感谢。
答案 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之外完成的,因此效率更高。