有人知道如何在Python中从多维数组中提取列吗?
当前回答
假设我们有nxm矩阵(n行m列)5行4列
matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]]
要在python中提取列,我们可以像这样使用列表推导式
[ [row[i] for row in matrix] for in range(4) ]
你可以用矩阵的列数来替换4。 结果是
,10,14,18,5,9,13,17 [[1], [2], [3,7,11,15,19], [4,8,12,16,20]]
其他回答
另一种使用矩阵的方法
>>> from numpy import matrix
>>> a = [ [1,2,3],[4,5,6],[7,8,9] ]
>>> matrix(a).transpose()[1].getA()[0]
array([2, 5, 8])
>>> matrix(a).transpose()[0].getA()[0]
array([1, 4, 7])
如果你有一个数组
a = [[1, 2], [2, 3], [3, 4]]
然后像这样提取第一列:
[row[0] for row in a]
结果是这样的:
[1, 2, 3]
我更喜欢下一个提示: 将矩阵命名为matrix_a并使用column_number,例如:
import numpy as np
matrix_a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
column_number=2
# you can get the row from transposed matrix - it will be a column:
col=matrix_a.transpose()[column_number]
>>> import numpy as np
>>> A = np.array([[1,2,3,4],[5,6,7,8]])
>>> A
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
>>> A[:,2] # returns the third columm
array([3, 7])
参见:"numpy。“Arange”和“重塑”来分配内存
示例:(用矩阵(3x4)的形状分配数组)
nrows = 3
ncols = 4
my_array = numpy.arange(nrows*ncols, dtype='double')
my_array = my_array.reshape(nrows, ncols)
只要使用转置(),就可以像求行一样简单地求列
matrix=np.array(originalMatrix).transpose()
print matrix[NumberOfColumns]