从列表中的numpy矩阵访问位置

时间:2013-07-10 12:09:12

标签: python numpy

我在列表中收集了numpy矩阵。我需要构建一个包含每个矩阵的特定条目的数组,例如每个矩阵的第二个条目。我想避免循环。

数据已经处于这种形状,我不想更改结构或将矩阵更改为其他内容。

示例代码 - 数据结构:

L = []
m1 = np.mat([ 1, 2, 3]).T
m2 = np.mat([ 4, 5, 6]).T
m3 = np.mat([ 7, 8, 9]).T
m4 = np.mat([10,11,12]).T
m5 = np.mat([13,14,15]).T  
L.append(m1)
L.append(m2)
L.append(m3)
L.append(m4)
L.append(m5)

我设法做到的唯一方法是通过循环:

S = []
for k in range(len(L)):
    S.append(L[k][1,0])
print 'S = %s' % S

我需要的输出:S = [2, 5, 8, 11, 14]我认为:S1 = np.array(L[:][1,0])应该可以正常工作,但无论我尝试什么,我都会遇到错误:TypeError: list indices must be integers, not tuple。访问它的有效方式(numpy风格)是什么?

3 个答案:

答案 0 :(得分:2)

使用列表理解:

>>> x = [i[1] for i in L]
>>> x
[2, 5, 8, 11, 14]
>>> 

答案 1 :(得分:2)

您也可以

>>> M = np.column_stack([m1,m2,m3,m4,m5])

然后通过

访问行
>>> M[1]
matrix([[ 2,  5,  8, 11, 14]])

如果你有更大的向量,并想要访问多行,从长远来看,这可能会更快。

答案 2 :(得分:1)

正如DSM所说,要么你应该有一个2D矩阵并使用numpy切片,否则某种形式的list-comp如Pawelmhm所示......更快的形式将是:

from operator import itemgetter
els = map (itemgetter(1), (m1, m2, m3, m4, m5))