访问矩阵的列

时间:2015-04-22 04:06:53

标签: python list matrix

python新手。我有一个矩阵喜欢:

[['A', 'A', 'A', 'A'],
 ['B', 'Z', 'A', 'A'],
 ['0', 'B', 'A', 'A'],
 ['0', 'C', 'A', 'A']
]

现在我该如何访问特定列?

喜欢[A B 0 0] [A Z B C]

谢谢!

3 个答案:

答案 0 :(得分:2)

如果需要逐列访问2D矩阵,则必须转置矩阵,以便可以将行作为行进行访问。 Python的zip内置函数可用于矩阵转置。

>>> zip(*mat)[0]
('A', 'B', '0', '0')

相反,您正在使用numpy array(如果您正在执行扩展矩阵操作,则建议使用),并使用numpy indexing。这很自然

>>> import numpy as np
>>> npmat = np.asarray(mat)
>>> npmat[:,0]
array(['A', 'B', '0', '0'], 
      dtype='|S1')

根据您的要求,您可以使用numpy.dstack转置整个矩阵(如果您使用的是numpy)或使用zip进行转置,然后再逐列索引

>>> np.dstack(mat)
array([[['A', 'B', '0', '0'],
        ['A', 'Z', 'B', 'C'],
        ['A', 'A', 'A', 'A'],
        ['A', 'A', 'A', 'A']]], 
      dtype='|S1')

答案 1 :(得分:1)

您可以使用zip内置函数来获取数组的列:

>>> a=[['A', 'A', 'A', 'A'],
...  ['B', 'Z', 'A', 'A'],
...  ['0', 'B', 'A', 'A'],
...  ['0', 'C', 'A', 'A']
... ]
>>> 
>>> zip(*a)
[('A', 'B', '0', '0'), ('A', 'Z', 'B', 'C'), ('A', 'A', 'A', 'A'), ('A', 'A', 'A', 'A')]

如果numpy中有矩阵,您可以使用dstack

>>> import numpy as np
>>> a=np.array([['A', 'A', 'A', 'A'],['B', 'Z', 'A', 'A'],['0', 'B', 'A', 'A'],['0', 'C', 'A', 'A']])
>>> np.dstack(a)
array([[['A', 'B', '0', '0'],
        ['A', 'Z', 'B', 'C'],
        ['A', 'A', 'A', 'A'],
        ['A', 'A', 'A', 'A']]], 
      dtype='|S1')

您也可以just use indexing获取特定列:

>>> a[:,0]
array(['A', 'B', '0', '0'], 
      dtype='|S1')

答案 2 :(得分:1)

要获得单个列(如果x是原始数组):

x_0 = [r[0] for r in x]

或者如果你这么做并且可以使用numpy,它看起来像这样:

y = np.array(x)
y_0 = y[:,0]

与使用zip和/或dstack相比,此方法的一个优点是数据复制最少。