有人知道如何在Python中从多维数组中提取列吗?


当前回答

如果你喜欢map-reduce风格的python, itemgetter操作符也会有帮助,而不是列表推导式,为了一点变化!

# tested in 2.4
from operator import itemgetter
def column(matrix,i):
    f = itemgetter(i)
    return map(f,matrix)

M = [range(x,x+5) for x in range(10)]
assert column(M,1) == range(1,11)

其他回答

如果你有一个数组

a = [[1, 2], [2, 3], [3, 4]]

然后像这样提取第一列:

[row[0] for row in a]

结果是这样的:

[1, 2, 3]

尽管使用zip(*iterable)来转置一个嵌套列表,如果嵌套列表的长度不同,你也可以使用以下方法:

map(None, *[(1,2,3,), (4,5,), (6,)])

结果:

[(1, 4, 6), (2, 5, None), (3, None, None)]

第一列如下:

map(None, *[(1,2,3,), (4,5,), (6,)])[0]
#>(1, 4, 6)

只要使用转置(),就可以像求行一样简单地求列

matrix=np.array(originalMatrix).transpose()
print matrix[NumberOfColumns]

假设我们有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]]

你也可以用这个:

values = np.array([[1,2,3],[4,5,6]])
values[...,0] # first column
#[1,4]

注意:这对于内置数组和未对齐的数组无效(例如np.array([[1,2,3],[4,5,6,7]]))