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]
谢谢!
答案 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
相比,此方法的一个优点是数据复制最少。