17

可能重复:
numpy:按列访问数组

我有一个 numpy 数组(numpy 被导入为 np)

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

我可以通过 gona[1][:] 获取第一行整列的值。

数组([4, 5, 6])

但是,如果我尝试获取所有行的特定列的所有值(比如我想要每一行中第一列的值),我会尝试 gona[:][1]。但是我从中得到的结果和以前一样。

这可能是什么原因?我如何在 numpy 中做这样的事情?

4

3 回答 3

40

你实际上想要这样做:

>>> a
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])
>>> a[:,1]
array([ 2,  5,  8, 11])

a[:]只返回整个数组,然后a[:][1]返回第二行a。我认为这就是你产生困惑的地方。

有关索引多维数组的更多信息,请参阅暂定 Numpy 教程的这一部分。

于 2013-02-01T16:26:51.717 回答
9

在大括号的定位方面似乎有点混乱,gona[:][1]首先从数组中选择所有内容,然后从该数组中选择第二行。要选择特定列,请将索引放在以逗号分隔的相同方括号内:

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

gona[1,:]
Out[21]: array([4, 5, 6])

gona[:,1]
Out[22]: array([ 2,  5,  8, 11])

gona[:,0]
Out[23]: array([ 1,  4,  7, 10])

例如,您也可以只选择一系列行

gona[0:2,0] # only take the two first rows of the first column
Out[24]: array([2, 5])
于 2013-02-01T16:30:50.170 回答
0

像这样:

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

# List comprehension, just get each element in 'gona', and then get first element in that list
out = [x[0] for x in gona]

print out

输出:

>>> 
[1, 4, 7, 10]
>>> 
于 2013-02-01T16:22:36.143 回答