numpy--1.4数组切片

获取x数组的一个切片:x[start : stop : step]

1.一维子数组

  x = np.range(10) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

  (1)前五个元素

    x[ : 5]

  (2)索引五之后的元素

    x[5 : ]

  (3)中间的子数组

    x[4 : 7]

  (4)每隔一个元素

    x[ : : 2]

  (5)每隔一个元素,从索引1开始

    x[1 : : 2]  # array([1, 3, 5, 7, 9])

  (6)所有元素,逆序

    x[ : : -1]  # array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])

  (7)从索引5开始每隔一个元素逆序

    x[5 : : -2]  # array([5, 3, 1])

2.多维子数组

多维切片也采用同样的方式,用逗号分割。

  x2 = np.array([[7, 9, 2, 1],

         [7, 3, 7, 5],

         [1, 4, 0, 7]])

  (1)两行,三列

    x2[ : 2, : 3]

    # array([[7, 9, 2],

    #    [7, 3, 7]])

  (2)所有行,每隔一列

    x2[ : 3, : : 2]

    # array([[7, 2],
    #    [7, 7],
    #    [1, 0]])

  (3)子数组也可以同时被逆序

    x2[ : : -1, : : -1]

    # array([[7, 0, 4, 1],
    #    [5, 7, 3, 7],
    #    [1, 2, 9, 7]])

3.获取数组的行和列

一种常见的需求是获取数组的单行和单列。可以将索引与切片组合起来实现这个功能,用一个冒号(:)表示空切片:

  (1)x2的第一列

    x2[ : , 0]  # array([7, 7, 1])

  (2)x2的第一行

    x2[0, : ]  # array([7, 9, 2, 1])

  在获取时,出于语法的简洁考虑,可以省略空的切片:

    x2[0]  等效于  x2[0, : ]

4.非副本视图的子数组

很重要的一点是,数组切片返回的是数组数据的视图,而不是数组数据的副本。这一点也是NumPy数组切片和Python列表切片的不同之处:在Python列表中,切片是值得副本。

这种默认的处理方式实际上非常有用:它意味着在处理非常大的数据集时,可以获取或处理这些数据集的片段,而不用复制底层的数据缓存。

5.创建数组的副本

可以通过copy()方法实现数组的复制:

  x2_sub_copy = x2[ : 2, : 2].copy()

posted @ 2020-05-15 16:12  编程小书童  阅读(198)  评论(0编辑  收藏  举报