Pythonic方法获取矩阵的某些行

时间:2009-07-09 16:44:37

标签: list coding-style filtering python

我正在考虑几年前我在Python中编写的代码,在某些时候,它必须通过索引获得列表列表中的一些元素。

我记得我做过这样的事情:

def getRows(m, row_indices):
    tmp = []
    for i in row_indices:
        tmp.append(m[i])
    return tmp

从那时起我已经学到了更多东西,我会使用这样的列表理解:

[m[i] for i in row_indices]

但我仍然想知道是否有更多的pythonic方式来做到这一点。有什么想法吗?

我想知道numpy o替代任何其他数组库的替代方案。

3 个答案:

答案 0 :(得分:4)

这是一种明显的清洁方式。所以,我会说它没有比那更多的Pythonic。

答案 1 :(得分:4)

值得查看NumPy的切片语法。在链接页面中向下滚动,直到进入“索引,切片和迭代”。

答案 2 :(得分:2)

正如Curt所说,Numpy似乎是一个很好的工具。这是一个例子,

from numpy import *

a = arange(16).reshape((4,4))
b = a[:, [1,2]]
c = a[[1,2], :]

print a
print b
print c

给出

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[[ 1  2]
 [ 5  6]
 [ 9 10]
 [13 14]]
[[ 4  5  6  7]
 [ 8  9 10 11]]