Python 使用冒号的Numpy阵列切片

Python 使用冒号的Numpy阵列切片,python,arrays,numpy,Python,Arrays,Numpy,我正在努力学习numpy数组切片 但这是一种我似乎无法理解的语法 什么是 a[:1]do 我用python运行了它 a = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]) a = a.reshape(2,2,2,2) a[:1] 输出: array([[[ 5, 6], [ 7, 8]], [[13, 14], [15, 16]]]) 有人能给我解释一下切片的原理吗。文档似乎没有回答这个

我正在努力学习numpy数组切片

但这是一种我似乎无法理解的语法

什么是

a[:1]
do

我用python运行了它

a = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])
a = a.reshape(2,2,2,2)
a[:1]
输出:

array([[[ 5,  6],
        [ 7,  8]],

       [[13, 14],
        [15, 16]]])
有人能给我解释一下切片的原理吗。文档似乎没有回答这个问题

另一个问题是,是否有一种方法可以使用

np.array(1:16)
或类似于python的东西,其中

x = [x for x in range(16)]

切片中的逗号用于分隔可能存在的各种尺寸。在第一个示例中,您正在重塑数据,使其具有4个维度,每个维度的长度为2。这可能有点难以可视化,因此,如果从二维结构开始,它可能更有意义:

>>> a = np.arange(16).reshape((4, 4))
>>> a
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11],
           [12, 13, 14, 15]])
>>> a[0]  # access the first "row" of data
    array([0, 1, 2, 3])
>>> a[0, 2]  # access the 3rd column (index 2) in the first row of the data
    2
如果要使用切片访问多个值,可以使用冒号表示范围:

>>> a[:, 1]  # get the entire 2nd (index 1) column
    array([[1, 5, 9, 13]])
>>> a[1:3, -1]  # get the second and third elements from the last column
    array([ 7, 11])
>>> a[1:3, 1:3]  # get the data in the second and third rows and columns
    array([[ 5,  6],
           [ 9, 10]])
您也可以执行以下步骤:

>>> a[::2, ::2]  # get every other element (column-wise and row-wise)
    array([[ 0,  2],
          [ 8, 10]])
希望有帮助。一旦这变得更有意义,您就可以通过使用
None
np.newaxis
或使用
省略号来查看添加维度的内容:

>>> a[:, None].shape
    (4, 1, 4)

您可以在这里找到更多信息:

在我们继续的过程中,探索
形状和单个条目可能会有所收获

让我们从

>>> a = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])
>>> a.shape
(16, )
这是一个长度为16的一维数组

现在让我们试试

>>> a = a.reshape(2,2,2,2)
>>> a.shape
(2, 2, 2, 2)
这是一个4维的多维数组

让我们看看0,1元素:

>>> a[0, 1]
array([[5, 6],
   [7, 8]])
因为还有两个维度,所以它是一个由两个维度组成的矩阵


现在
a[:,1]
说:取
a[i,1
作为
i
的所有可能值:

>>> a[:, 1]
array([[[ 5,  6],
    [ 7,  8]],

   [[13, 14],
    [15, 16]]])

它提供了一个数组,其中第一项是
a[0,1]
,第二项是
a[1,1]
,用于回答问题的第二部分(生成序列值数组)您可以使用或。这两个选项都返回一个带有相应值范围的numpy数组。

我是从笔记本上复制的,所以我可能会漏掉那一行,但我们假设它漏掉了