zoukankan      html  css  js  c++  java
  • ndim 与 shape的区别

    [[ 1., 0., 0.],
     [ 0., 1., 2.]] 

    在上面这个例子中,数组的ndim为2(它有两个维度(简单的辨别两层方括号)).

    第一个维度的长度为2,也就是有两个子数组

    第二个维度的长度为3,也就是每个子数组里有三个元素

    所以shape属性返回的是(2,3)

    简单来看 shape就是每个 维度中的元素/单元 长度size

    ndim就是每个数组的嵌套层数

    下面是一个二维数组,ndim为2,shape属性值为(3,3)

    b = 
    [
       [1,2,3],
       [4,5,6],
       [7,8,9]
    ]
    取得一个确切的元素,用b[i][j]的格式,数组嵌套了2层,第一层有三个元素,第二层也是三个元素

    下面是一个三维数组,ndim为3,shape属性值为(2,2,3)

    c = 
    [
        [
            [1,2,3],
            [4,5,6]
        ],
        [
           [7,8,9],
           [10,11,12]
        ]
    ]
    取得一个确切的元素,
    用b[i][j][k]的格式,数组嵌套了3层,第一层有2个元素,第二层也是2个元素,第三层有三个元素

    或者 ndim = len(shape)

    axis = 0表示第一层layer

    在代码中看到的效果就是b从外向里数第一层 [ ],对应的元素(length = 3)就是第一层 [ ] 中用逗号分隔的全部元素(注意:不要关注第二层及以上 [ ] 里的逗号),很明显这一层的元素数目为3;

    axis = 1表示第二层layer:第一层layer中用逗号分隔开的任意一个 [ ] 中,再由逗号分隔开的全部元素(length = 2);

    axis = 2同理,表示最后一层layer中的元素(length = 4)。这么说还是有些乱,我把刚才的array重新布置一下:

    黑色代表第一层layer,可以看到有三个元素,红色代表第二层layer,在第一层layer相同的前提下有两个元素,蓝色代表第三层layer,在第一层和第二层layer都相同的前提下有4个元素。这样也就对应上了b.shape = (3, 2, 4)的结果。

    这时候如果我们想定位到元素8应该怎么索引?可以看到8在第一层layer的第二个元素内,同时在第二层layer的第二个元素内、第三层layer的第一个元素,也就是说:8是axis = 0轴上的第二个位置、axis = 1轴上的第二个位置,axis = 2的第一个位置共同retrieve到的元素。

    8的索引

    [1,1,0]

    详细参考

    https://zhuanlan.zhihu.com/p/25761406

  • 相关阅读:
    我的黑客偶像
    IEEE754浮点数
    罗马数字转化为阿拉伯数字
    2020-2021-1 20201221 《信息安全专业导论》第三周学习总结
    base64
    2020-2021-1 20201221曾思源《第二周学习总结》
    师生关系
    教材速读问题
    20201221曾思源自我介绍
    20201221 曾思源 第一周学习总结
  • 原文地址:https://www.cnblogs.com/clemente/p/10399319.html
Copyright © 2011-2022 走看看