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