首页 > 解决方案 > 切片numpy arrayx时形状改变

问题描述

我以下面的数组为例:

lights = np.array([ [1,0,1], [0,1,1], [0,0,1], [1,1,1] ])

lights[0] 返回一个形状:(3,)

lights[0:1]返回一个形状:(1, 3)

在这种情况下,我不明白 numpy 的逻辑是什么。鉴于切片是独占的,[0:1] 类似于 [0]。那么,为什么它会影响阵列的形状呢?

标签: arraysnumpyreshape

解决方案


https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#basic-slicing-and-indexing

整数 i 返回与 i:i+1 相同的值,只是返回对象的维数减 1。特别是,具有第 p 个整数的选择元组(以及所有其他条目:)返回对应维度为 N - 1 的子数组。如果 N = 1,则返回的对象是数组标量。这些对象在标量中进行了解释。

这种numpy标量与切片的索引与 Python 的列表索引一致:

In [119]: alist = [ [1,0,1], [0,1,1], [0,0,1], [1,1,1] ]                                               
In [120]: alist[0]                                                                                     
Out[120]: [1, 0, 1]     # one element of alist
In [121]: alist[0:1]                                                                                   
Out[121]: [[1, 0, 1]]    # a list with one element
In [122]: alist[0][1]    # nested selection of a number                                                     
Out[122]: 0

数组等价物,匹配使用 []:

In [123]: arr = np.array(alist)                                                                        
In [124]: arr                                                                                          
Out[124]: 
array([[1, 0, 1],
       [0, 1, 1],
       [0, 0, 1],
       [1, 1, 1]])
In [125]: arr[0]                                                                                       
Out[125]: array([1, 0, 1])
In [126]: arr[0:1]                                                                                     
Out[126]: array([[1, 0, 1]])
In [127]: arr[0,1]                                                                                     
Out[127]: 0

numpy还可以使用元组、列表和数组进行索引。


推荐阅读