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


当前回答

def get_col(arr, col):
    return map(lambda x : x[col], arr)

a = [[1,2,3,4], [5,6,7,8], [9,10,11,12],[13,14,15,16]]

print get_col(a, 3)

Python中的map函数是另一种方法。

其他回答

如果你有一个数组

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)

我认为你想从一个数组中提取一个列,比如下面的数组

import numpy as np
A = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])

现在如果你想要得到格式中的第三列

D=array[[3],
[7],
[11]]

然后你需要首先把数组变成一个矩阵

B=np.asmatrix(A)
C=B[:,2]
D=asarray(C)

现在你可以做基于元素的计算就像你在excel中做的一样。

>>> 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)

如果你在Python中有一个二维数组(不是numpy),你可以像这样提取所有的列,

data = [
['a', 1, 2], 
['b', 3, 4], 
['c', 5, 6]
]

columns = list(zip(*data))

print("column[0] = {}".format(columns[0]))
print("column[1] = {}".format(columns[1]))
print("column[2] = {}".format(columns[2]))

执行这段代码会得到,

>>> print("column[0] = {}".format(columns[0]))
column[0] = ('a', 'b', 'c')

>>> print("column[1] = {}".format(columns[1]))
column[1] = (1, 3, 5)

>>> print("column[2] = {}".format(columns[2]))
column[2] = (2, 4, 6)