繁体   English   中英

切片numpy数组与选择单个元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM