切片。结果是行还是列?

时间:2018-04-01 04:36:55

标签: numpy

我想知道为什么a)返回一列,而b)返回一行。

a)专栏

x = np.array([[ 0,  1,  2],[ 3,  4,  5],[ 6,  7,  8],[ 9, 10, 11]]) 
z = x[0:4:1,0:1:1]

返回

  

[[0]    [3]    [6]    [9]]

b)行

 z = x[0:4  ,0]

返回

  

[0 3 6 9]

1 个答案:

答案 0 :(得分:0)

In [119]: x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
In [120]: x
Out[120]: 
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
In [121]: x.shape
Out[121]: (4, 3)

使用标量进行索引,例如0,选择(在本例中)第一列,但返回1d数组。标量索引会删除维度。

In [122]: x[:,0]
Out[122]: array([0, 3, 6, 9])    # shape (4,), 1d

使用列表进行索引会返回一个(4,1)数组,1表示列表的大小:

In [123]: x[:,[0]]
Out[123]: 
array([[0],
       [3],
       [6],
       [9]])

使用切片进行索引会做同样的事情:

In [124]: x[:,0:1]
Out[124]: 
array([[0],
       [3],
       [6],
       [9]])

存在细微差别,Out[123]是副本,Out[124]是视图。

使用切片进行索引时,每个切片确定结果的维度,在本例中为4和1.

使用标量进行索引时,将删除该维度。

使用列表或数组建立索引时,适用广播规则。

你应该早晚学习索引文档。密切关注结果的形状:

https://docs.scipy.org/doc/numpy-1.14.0/reference/arrays.indexing.html