[英]Slicing a numpy array vs selecting a single element
我有一个数组:
arr = np.array([[1,2,3], [4,5,6], [7,8,9]])
如果我将数组arr[:, :1]
切片,我的结果是array([[1], [4], [7]])
。
如果我将数组arr[:, 0]
切片,我的结果是array([1, 4, 7])
。
为什么有区别?
:1
是一个切片(恰好长度为1),因此numpy返回数组中每一行的列表(第一暗)。 这就是为什么要得到一个二维数组的原因:您要求带有:
的子数组。
另一方面,索引是0
,因此numpy会将结果缩小1维,从而得到一列值(更精确地说是1维数组)。
https://docs.scipy.org/doc/numpy-1.14.2/user/basics.indexing.html#single-element-indexing
声称单元素索引的行为类似于通常的Python列表索引。 切片也遵循这种模式
In [175]: arr = np.arange(6).reshape(2,3)
In [176]: arr
Out[176]:
array([[0, 1, 2],
[3, 4, 5]])
单元素索引-返回一维数组
In [177]: arr[1,:]
Out[177]: array([3, 4, 5])
切片索引返回二维数组
In [178]: arr[:1,:]
Out[178]: array([[0, 1, 2]])
带有等效列表
In [179]: alist = arr.tolist()
单元素索引将返回一个列表:
In [180]: alist[1]
Out[180]: [3, 4, 5]
切片索引返回嵌套列表:
In [181]: alist[:1]
Out[181]: [[0, 1, 2]]
当我索引一维数组或数字列表时,也存在相同的模式。
numpy
将其推广到列和更高维度,但尝试保持模式相同。
In [187]: arr[:,0]
Out[187]: array([0, 3])
In [188]: arr[:,:1]
Out[188]:
array([[0],
[3]])
In [189]: [x[0] for x in alist]
Out[189]: [0, 3]
In [190]: [x[:1] for x in alist]
Out[190]: [[0], [3]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.