使用逗号进行Numpy数组切片

时间:2016-02-04 15:37:27

标签: python arrays numpy

我正在尝试学习numpy数组切片。

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

什么是

a [:1]做。

我在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)]

3 个答案:

答案 0 :(得分:8)

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

>>> 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]])

希望有所帮助。一旦更有意义,您可以使用Nonenp.newaxis或使用...省略号来查看添加维度等内容:

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

您可以在此处找到更多信息:http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html

答案 1 :(得分:3)

在我们进行中探索shape和个别条目可能会付出代价。

让我们从

开始
>>> 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, 1i的所有可能值:

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

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

它会为您提供一个数组,其中第一项为a[0, 1],第二项为a[1, 1]

答案 2 :(得分:2)

要回答问题的第二部分(生成连续值数组),您可以使用np.arange(start, stop, step)np.linspace(start, stop, num_elements)。这两个都返回一个numpy数组,其中包含相应的值范围。