zoukankan      html  css  js  c++  java
  • 【NumPy学习指南】day4 多维数组的切片和索引

    ndarray支持在多维数组上的切片操作。为了方便起见,我们可以用一个省略号(...)来
    表示遍历剩下的维度。
    (1) 举例来说,我们先用arange函数创建一个数组并改变其维度,使之变成一个三维数组:

    b=np.arange(24).reshape(2,3,4)
    b.shape
    (2L, 3L, 4L)

    b
    array([[[ 0, 1, 2, 3],
    [ 4, 5, 6, 7],
    [ 8, 9, 10, 11]],
    [[12, 13, 14, 15],
    [16, 17, 18, 19],
    [20, 21, 22, 23]]])
    多维数组b中有0~23的整数,共24个元素,是一个2×3×4的三维数组。我们可以形象地把它看做一个两层楼建筑,每层楼有12个房间,并排列成3行4列。或者,我们也可以将其看成是电子表格中工作表(sheet)、行和列的关系。你可能已经猜到,reshape函数的作用是改变数组的“形状”,也就是改变数组的维度,其参数为一个正整数元组,分别指定数组在每个维度上的大小。如果指定的维度和数组的元素数目不相吻合,函数将抛出异常。
    (2)我们可以用三维坐标来选定任意一个房间,即楼层、行号和列号。例如,选定第1层楼、第1行、第1列的房间(也可以说是第0层楼、第0行、第0列,这只是习惯问题),可以这样表示:

    b[0,0,0]
    0
    (3) 如果我们不关心楼层,也就是说要选取所有楼层的第1行、第1列的房间,那么可以将第1
    个下标用英文标点的冒号:来代替:

    b[:,0,0]
    array([ 0, 12])

    b[0]
    array([[ 0, 1, 2, 3],
    [ 4, 5, 6, 7],
    [ 8, 9, 10, 11]])
    我们还可以这样写,选取第1层楼的所有房间:

    b[0,:,:]
    array([[ 0, 1, 2, 3],
    [ 4, 5, 6, 7],
    [ 8, 9, 10, 11]])
    多个冒号可以用一个省略号(...)来代替,因此上面的代码等价于:

    b[0,...]
    array([[ 0, 1, 2, 3],
    [ 4, 5, 6, 7],
    [ 8, 9, 10, 11]])
    进而可以选取第1层楼、第2排的所有房间:

    b[0,1]
    array([4, 5, 6, 7])
    (4) 再进一步,我们可以在上面的数组切片中间隔地选定元素:

    b[0,1,::2]
    array([4, 6])
    (5) 如果要选取所有楼层的位于第2列的房间,即不指定楼层和行号,用如下代码即可:

    b[...,1]
    array([[ 1, 5, 9],
    [13, 17, 21]])
    类似地,我们可以选取所有位于第2行的房间,而不指定楼层和列号:

    b[:,1]
    array([[ 4, 5, 6, 7],
    [16, 17, 18, 19]])
    如果要选取第1层楼的所有位于第2列的房间,在对应的两个维度上指定即可:

    b[0,:,1]
    array([1, 5, 9])
    (6) 如果要选取第1层楼的最后一列的所有房间,使用如下代码:

    b[0,:,-1]
    array([ 3, 7, 11])
    如果要反向选取第1层楼的最后一列的所有房间,使用如下代码:

    b[0,::-1,-1]
    array([11, 7, 3])
    在该数组切片中间隔地选定元素:

    b[0,::2,-1]
    array([ 3, 11])
    如果在多维数组中执行翻转一维数组的命令,将在最前面的维度上翻转元素的顺序,在我们
    的例子中将把第1层楼和第2层楼的房间交换:

    b[::-1]
    array([[[12, 13, 14, 15],
    [16, 17, 18, 19],
    [20, 21, 22, 23]],

       [[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]]])
    

    刚才做了些什么
    我们用各种方法对一个NumPy多维数组进行了切片操作。

  • 相关阅读:
    Github基础(一)
    python3中编码和解码
    sql面试题(一)
    sql查询(三)--having子句求众数、中位数
    sql查询
    numpy中ndarray数据结构简介
    qt信号和槽
    logtag查看log
    AT45DB161D 概述
    C中的auto、static、register、extern、const和volitate
  • 原文地址:https://www.cnblogs.com/jpld/p/4970148.html
Copyright © 2011-2022 走看看