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

Python 从列表中的numpy矩阵访问位置,python,numpy,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.ap

我在列表中收集了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])
应该可以工作,但无论我怎么做,我都会遇到这样的错误:
类型错误:列表索引必须是整数,而不是元组。访问它的有效方式(numpy风格)是什么?

使用列表理解:

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

使用列表理解:

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

正如DSM所说,或者你应该有一个2D矩阵,并使用numpy切片,否则,某种形式的列表comp,如Pawelmhm所示。。。更快的形式将是:

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

正如DSM所说,或者你应该有一个2D矩阵,并使用numpy切片,否则,某种形式的列表comp,如Pawelmhm所示。。。更快的形式将是:

from operator import itemgetter
els = map (itemgetter(1), (m1, m2, m3, m4, m5))
你也可以这样做

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

>>> M[1]
matrix([[ 2,  5,  8, 11, 14]])
如果您有更大的向量,并且希望访问多行,那么从长远来看,这可能会更快。

您也可以这样做

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

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

如果您有更大的向量,并且希望访问多行,那么从长远来看,这可能会更快。

这不是有点像编写循环,但风格不同吗?我认为,通过索引访问是创建新列表的一种简洁且相当有效的方法。列表理解对于Python来说是典型的,它们被认为是“pythonic”,感谢@Pawelmhm它确实加快了执行速度,所以肯定是改进了。这不是有点像编写循环,但风格不同吗?我认为,通过索引访问是创建新列表的一种简洁且相当有效的方法。列表理解对于Python来说是典型的,它们被认为是“pythonic”,感谢@Pawelmhm它确实加快了执行速度,所以肯定是改进了。如果你不想改变结构,我认为你运气不好。你不能使用numpy索引来处理非numpy对象的对象,你的L是一个Python列表。如果你不想改变结构,我认为你运气不好。您不能使用numpy索引来处理非numpy对象的对象,并且您的L是Python列表。谢谢。在原始代码中,列表中有几千个矩阵。显然它们没有命名。@tomasz74然后使用
L
代替名称谢谢。在原始代码中,列表中有几千个矩阵。显然它们没有命名。@tomasz74然后使用
L
代替名称