我想知道为什么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]
答案 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