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多维数组进行了切片操作。

  • 相关阅读:
    hdu acm 2844 Coins 解题报告
    hdu 1963 Investment 解题报告
    codeforces 454B. Little Pony and Sort by Shift 解题报告
    广大暑假训练1 E题 Paid Roads(poj 3411) 解题报告
    hdu acm 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
    hdu acm 1114 Piggy-Bank 解题报告
    poj 2531 Network Saboteur 解题报告
    数据库范式
    ngnix 配置CI框架 与 CI的简单使用
    Vundle的安装
  • 原文地址:https://www.cnblogs.com/jpld/p/4970148.html
Copyright © 2011-2022 走看看