0

我在列表中收集了 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 风格)是什么?

4

3 回答 3

2

使用列表理解:

>>> x = [i[1] for i in L]
>>> x
[2, 5, 8, 11, 14]
>>> 
于 2013-07-10T12:15:13.127 回答
2

你也可以做

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

然后通过访问行

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

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

于 2013-07-10T14:52:37.773 回答
1

As DSM says, either you should have a 2D matrix and use numpy slicing, otherwise some form of list-comp as shown by Pawelmhm... A faster form will be:

from operator import itemgetter
els = map (itemgetter(1), (m1, m2, m3, m4, m5))
于 2013-07-10T12:37:01.913 回答