from:http://blog.csdn.net/by_study/article/details/67633593

环境:Windows, Python3.5

一维情况:

>>>> import numpy as np
>>> a = np.array([2,3,33])
>>> a
array([ 2 3 33 ])
>>> print(a)
[ 2 3 33 ]
>>> a.shape
(3, )
>>> a.shape[0]  
3
>>> a.shape[1]  
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: tuple index out of range

一维情况中array创建的可以看做list(或一维数组),创建时用()和[ ]都可以,多维也一样,两种方法创建后的输出显示结果也相同,这里使用[ ]进行创建

输出a的shape会显示一个参数,就是这个list中元素个数
创建时也可以直接使用np.zeros([1]),这样会创建全0的list,或者np.ones([1]),不需要我们输入数据,见下图:
>>>> a = np.zeros([1])
b = np.ones([1])
>>> print(a)
[ 0. ]
>>> print(b)
[ 1. ]

二维情况:

>>> a = np.array([[2,3,33],[2,1,1]])
>>> a
array([[ 2, 3, 33],
[ 2, 1, 1]])
>>> a.shape[0]
2
>>> a.shape[1]
3
>>> a.shape[2]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: tuple index out of range

二维情况中array创建的可以看做二维数组(矩阵),注意创建时需要使用2个[ ],输出a的shape显示的(2,3)相当于有2行,每行3个数,使用np.ones创建结果如下:

>>> a = np.ones([2, 3])
>>> a
array([[ 1., 1., 1.],
[ 1., 1., 1.]])

多维情况:

多维情况统一使用np.ones进行创建,先看三维情况:
>>> a = np.ones([1,1,1])
>>> a
array([[[ 1.]]])
>>> a = np.ones([1,1,2])
>>> a
array([[[ 1., 1.]]])
>>> a = np.ones([1,2,1])
>>> a
array([[[ 1.],
[ 1.]]])
>>> a = np.ones([2,1,1])
>>> a
array([[[ 1.]], [[ 1.]]])

从上面的代码可以看出,三维情况创建时后面2个参数可以看做是创建二维数组,第1个参数看做创建的二维数组的个数,所以创建时输入的参数为2,3,2时,就相当于创建了2个3行2列的二维数组,如下:

>>> a = np.ones([2,3,2])
>>> a
array([[[ 1., 1.],
[ 1., 1.],
[ 1., 1.]], [[ 1., 1.],
[ 1., 1.],
[ 1., 1.]]])

然后看四维情况:

>>> a = np.ones([1,1,1,1])
>>> a
array([[[[ 1.]]]])
>>> a = np.ones([1,1,1,2])
>>> a
array([[[[ 1., 1.]]]])
>>> np.ones([1,1,2,1])
array([[[[ 1.],
[ 1.]]]])
>>> np.ones([1,2,1,1])
array([[[[ 1.]], [[ 1.]]]])
>>> np.ones([2,1,1,1])
array([[[[ 1.]]], [[[ 1.]]]])

从上面代码可以看出:四维时将第一个参数设置为2和第二个参数设置为2时,输出结果中间的空行数量不同,我把它理解成先创建1行1列的二维数组[[ 1. ]],然后按照第2个参数打包这样的二维数组,如果第二个参数是2,则打包2个2维数组变成[[[ 1. ]],[[ 1. ]]](小包),然后按照第1个参数再打包这样的包,如果第一个参数是2,则变成[[[[ 1. ]], [[ 1. ]]], [[[ 1. ]], [[ 1. ]]]](大包),就是下面的结果:

>>> np.ones([2,2,1,1])
array([[[[ 1.]], [[ 1.]]], [[[ 1.]], [[ 1.]]]])

四维以上的结果也是这么理解~输出中区分参数用空行~

 
然后来看一下特定输出:
>>> m = np.ones([2,3,2,3])
>>> m
array([[[[ 1., 1., 1.],
[ 1., 1., 1.]], [[ 1., 1., 1.],
[ 1., 1., 1.]], [[ 1., 1., 1.],
[ 1., 1., 1.]]], [[[ 1., 1., 1.],
[ 1., 1., 1.]], [[ 1., 1., 1.],
[ 1., 1., 1.]], [[ 1., 1., 1.],
[ 1., 1., 1.]]]])
>>> m[1,:,:,:]
array([[[ 1., 1., 1.],
[ 1., 1., 1.]], [[ 1., 1., 1.],
[ 1., 1., 1.]], [[ 1., 1., 1.],
[ 1., 1., 1.]]])
>>> m[:,1,:,:]
array([[[ 1., 1., 1.],
[ 1., 1., 1.]], [[ 1., 1., 1.],
[ 1., 1., 1.]]])
>>> m[:,:,1,:]
array([[[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]], [[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]]])
>>> m[:,:,:,1]
array([[[ 1., 1.],
[ 1., 1.],
[ 1., 1.]], [[ 1., 1.],
[ 1., 1.],
[ 1., 1.]]])
然后m[1,:,:,:],:代表默认值(就是一开始你输入时指定的值),这句代码相当于输出2个包中的第1个包(从0开始计数),这个包里面有3个小包,小包里面是2*3的二维数组,所以结果就是上面的~
然后m[:,1,:,:],相当于输出2个大包,每个大包输出第1个小包,小包里面是2*3的二维数组
然后m[:,:,1,:],相当于输出2个大包,每个大包输出3个小包,小包里面是二维数组的第1行
然后m[:,:,:,1],相当于输出2个大包,每个大包输出3个小包,小包里面是1*2的二维数组
其他结果可以自己去试试~
 
总结:采用np.array()创建时需要几个维度就要用几个[

]括起来,这种创建方式要给定数据;采用np.ones()或np.zeros()创建分别产生全1或全0的数据,用a.shape会输出你创建时的输入,创建时输入了几个维度输出就会用几个[
]括起来,shape的返回值是一个元组,里面每个数字表示每一维的长度

np.shape[]是对应到某一维上输出指定维的长度

对numpy中shape的理解的更多相关文章

  1. numpy 中的 broadcasting 理解

    broadcast 是 numpy 中 array 的一个重要操作. 首先,broadcast 只适用于加减. 然后,broadcast 执行的时候,如果两个 array 的 shape 不一样,会先 ...

  2. numpy中shape的部分解释

    转载自:https://blog.csdn.net/qq_28618765/article/details/78081959和https://www.jianshu.com/p/e083512e4f4 ...

  3. Python:numpy中shape和reshape的用法

    >>> w=np.zeros((5,6))>>> warray([[ 0.,  0.,  0.,  0.,  0.,  0.],       [ 0.,  0.,  ...

  4. [开发技巧]·Numpy中对axis的理解与应用

    [开发技巧]·Numpy中对axis的理解与应用 1.问题描述 在使用Numpy时我们经常要对Array进行操作,如果需要针对Array的某一个纬度进行操作时,就会用到axis参数. 一般的教程都是针 ...

  5. numpy中 array数组的shape属性

    numpy.array 的shape属性理解 在码最邻近算法(K-Nearest Neighbor)的过程中,发现示例使用了numpy的array数组管理,其中关于array数组的shape(状态)属 ...

  6. 理解numpy中ndarray的内存布局和设计哲学

    目录 ndarray是什么 ndarray的设计哲学 ndarray的内存布局 为什么可以这样设计 小结 参考 博客:博客园 | CSDN | blog 本文的主要目的在于理解numpy.ndarra ...

  7. 关于NumPy中数组轴的理解

    参考原文链接(英文版):https://www.sharpsightlabs.com/blog/numpy-axes-explained/:中文版:https://www.jianshu.com/p/ ...

  8. python中numpy.ndarray.shape的用法

    今天用到了shape,就顺便学习一下,这个shape的作用就是要把矩阵进行行列转换,请看下面的几个例子就明白了: >>> import numpy as np >>> ...

  9. Numpy中Meshgrid函数介绍及2种应用场景

    近期在好几个地方都看到meshgrid的使用,虽然之前也注意到meshgrid的用法.但总觉得印象不深刻,不是太了解meshgrid的应用场景.所以,本文将进一步介绍Numpy中meshgrid的用法 ...

随机推荐

  1. Fantasy of a Summation LightOJ - 1213 (快速幂)

    题意: 首先 只看第一层循环的A[0],是不是用了nk-1次  A[1]也是用了nk-1次······ 所以 第一层的sum(A[i]的和) 一共用了nk-1 所以第一层为sum * nk-1 因为又 ...

  2. day21 计算器作业

    import re express = '1 - 2 * ( ( 6 0 -3 0 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4 ...

  3. BZOJ 4555: [Tjoi2016&Heoi2016]求和 (NTT + 第二类斯特林数)

    题意 给你一个数 \(n\) 求这样一个函数的值 : \[\displaystyle f(n)=\sum_{i=0}^{n}\sum_{j=0}^{i} \begin{Bmatrix} i \\ j ...

  4. 【SDOI 2017】龙与地下城(组合)

    概率论太难了,不会.但这不能阻止我们过题.相信大家都会一个基于背包的暴力做法,我们可以将其看成是卷积的形式就可以用fft优化了.形式化讲,就是求幂级数$ (\sum\limits_{i = 0}^{x ...

  5. HTML5小游戏-简单抽奖小游戏

    换了新工作以后,专注前端开发,平常空闲时间也比较多,可以多钻研一下技术,写一下博客.最近在学习canvas,参考网上的slotmachine插件,用canvas实现了一个简单抽奖小游戏.       ...

  6. 【ATcoder】Xor Sum 2

    题目大意:给定一个 N 个点的序列,求有多少个区间满足\(\oplus_{i=l}^ra[i]=\sum\limits_{i=l}^ra[i]\). 题解: 小结论:\(a\oplus b=a+b\r ...

  7. typescript泛型(学习笔记非干货)

    软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性. 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型, 这在创建大型系统时为你提供了十分灵活的功能. In softwa ...

  8. Deformable ConvNets

    Deformable ConvNets 论文 Deformable Convolutional Networks(arXiv:1703.06211) CNN受限于空间结构,具有较差的旋转不变性,较弱的 ...

  9. linux下查找某文件关键字(grep 函数)

    -e表示罗列出与关键字有关的行,“ABC”表示查找的关键字,/XXX/4.assoc.linear表示该路径下的文件 .assoc.linear

  10. js数组作为参数用ajax向后台传参数

    /*前台往后台传参数时,可以这样写*/ var chessId = "123"; var i=0; var data = []; /*添加单个参数*/ data.push({nam ...