对numpy中shape的深入理解


Posted in Python onJune 15, 2018

环境:Windows, Python2.7

一维情况:

<span style="font-size:14px;">>>> import numpy as np 
>>> a = np.array([2,3,33]) 
>>> a 
array([ 2 3 33 ]) 
>>> print a 
[ 2 3 33 ] 
>>> a.shape 
(3, )</span>

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

输出a的shape会显示一个参数,就是这个list中元素个数

创建时也可以直接使用np.zeros([1]),这样会创建全0的list,或者np.ones([1]),不需要我们输入数据,见下图:

<span style="font-size:14px;">>>> a = np.zeros([1]) 
>>> b = np.ones([1]) 
>>> print a 
[ 0. ] 
>>> print b 
[ 1. ]</span>

二维情况:

<span style="font-size:14px;">>>> a = np.array([[2,2,2],[3,3,3]]) 
>>> print a 
[[ 2 2 2 ] 
 [ 3 3 3 ]] 
>>> a.shape 
(2, 3)</span>

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

<span style="font-size:14px;">>>> a = np.ones([2, 3]) >>> print a [[ 1. 1. 1. ] [ 1. 1. 1. ]]</span>

多维情况:

多维情况统一使用np.ones进行创建,先看三维情况:

<span style="font-size:14px;">>>> a = np.ones([1,1,1]) 
>>> print a 
[[[ 1.]]] 
>>> a = np.ones([1,1,2]) 
>>> print a 
[[[ 1. 1.]]] 
>>> a = np.ones([1,2,1]) 
>>> print a 
[[[ 1.] 
 [ 1.]]] 
>>> a = np.ones([2,1,1]) 
>>> print a 
[[[ 1.]] 
 
 [[ 1.]]]</span>

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

<span style="font-size:14px;">>>> a = np.ones([2,3,2]) 
>>> print a 
[[[ 1. 1.] 
 [ 1. 1.] 
 [ 1. 1.]] 
 
 [[ 1. 1.] 
 [ 1. 1.] 
 [ 1. 1.]]]</span>

然后看四维情况:

<span style="font-size:14px;">>>> a = np.ones([1,1,1,1]) 
>>> print a 
[[[[ 1.]]]] 
>>> a = np.ones([1,1,1,2]) 
>>> print a 
[[[[ 1. 1.]]]] 
>>> a = np.ones([1,1,2,1]) 
>>> print a 
[[[[ 1.] 
 [ 1.]]]] 
>>> a = np.ones([1,2,1,1]) 
>>> print a 
[[[[ 1.]] 
 
 [[ 1.]]]] 
>>> a = np.ones([2,1,1,1]) 
>>> print a 
[[[[ 1.]]] 
 
 
 [[[ 1.]]]]</span>

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

<span style="font-size:14px;">>>> a = np.ones([2,2,1,1]) 
>>> print a 
[[[[ 1.]] 
 
 [[ 1.]]] 
 
 
 [[[ 1.]] 
 
 [[ 1.]]]]</span>

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

然后来看一下特定输出:

>>> import numpy as np
>>> m = np.ones([2,3,2,3])
>>> print m
[[[[ 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.]]]]
>>> print m[1,:,:,:]
[[[ 1. 1. 1.]
 [ 1. 1. 1.]]
 [[ 1. 1. 1.]
 [ 1. 1. 1.]]
 [[ 1. 1. 1.]
 [ 1. 1. 1.]]]
>>> print m[:,1,:,:]
[[[ 1. 1. 1.]
 [ 1. 1. 1.]]
 [[ 1. 1. 1.]
 [ 1. 1. 1.]]]
>>> print m[:,:,1,:]
[[[ 1. 1. 1.]
 [ 1. 1. 1.]
 [ 1. 1. 1.]]
 [[ 1. 1. 1.]
 [ 1. 1. 1.]
 [ 1. 1. 1.]]]
>>> print m[:,:,:,1]
[[[ 1. 1.]
 [ 1. 1.]
 [ 1. 1.]]
 [[ 1. 1.]
 [ 1. 1.]
 [ 1. 1.]]]

前面print m很好理解~

然后print m[1,:,:,:],:代表默认值(就是一开始你输入时指定的值),这句代码相当于输出2个包中的第1个包(从0开始计数),这个包里面有3个小包,小包里面是2*3的二维数组,所以结果就是上面的~

然后print m[:,1,:,:],相当于输出2个大包,每个大包输出第1个小包,小包里面是2*3的二维数组

然后print m[:,:,1,:],相当于输出2个大包,每个大包输出3个小包,小包里面是二维数组的第1行

然后print m[:,:,:,1],相当于输出2个大包,每个大包输出3个小包,小包里面是1*2的二维数组

其他结果可以自己去试试~

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

以上这篇对numpy中shape的深入理解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python线程的两种编程方式
Apr 14 Python
利用Tkinter(python3.6)实现一个简单计算器
Dec 21 Python
Pandas 合并多个Dataframe(merge,concat)的方法
Jun 08 Python
flask中的wtforms使用方法
Jul 21 Python
Python随机函数库random的使用方法详解
Aug 21 Python
python 表格打印代码实例解析
Oct 12 Python
Python 实现OpenCV格式和PIL.Image格式互转
Jan 09 Python
Python unittest框架操作实例解析
Apr 13 Python
150行python代码实现贪吃蛇游戏
Apr 24 Python
Python离线安装各种库及pip的方法
Nov 28 Python
Python如何使用神经网络进行简单文本分类
Feb 25 Python
Python机器学习算法之决策树算法的实现与优缺点
May 13 Python
Python基于property实现类的特性操作示例
Jun 15 #Python
使用python 3实现发送邮件功能
Jun 15 #Python
快速解决pandas.read_csv()乱码的问题
Jun 15 #Python
解决pandas read_csv 读取中文列标题文件报错的问题
Jun 15 #Python
Python使用Pickle库实现读写序列操作示例
Jun 15 #Python
基于Pandas读取csv文件Error的总结
Jun 15 #Python
解决pandas使用read_csv()读取文件遇到的问题
Jun 15 #Python
You might like
UTF8编码内的繁简转换的PHP类
2009/07/09 PHP
javascript getElementsByClassName函数
2010/04/01 Javascript
jQuery Ajax提交表单查询获得数据实例代码
2012/09/19 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
用js一次改变多个input的readonly属性值的方法
2014/06/11 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
ECHO.js 纯javascript轻量级延迟加载的实例代码
2016/05/24 Javascript
js接收并转化Java中的数组对象的方法
2016/08/11 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
JS异步文件上传(兼容IE8+)
2017/04/02 Javascript
详解使用angularjs的ng-options时如何设置默认值(初始值)
2017/07/18 Javascript
Vue实现简单分页器
2018/12/29 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
2019/02/20 Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
2019/05/15 Javascript
布同 统计英文单词的个数的python代码
2011/03/13 Python
python中异常报错处理方法汇总
2016/11/20 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
2018/02/08 Python
python实现类之间的方法互相调用
2018/04/29 Python
利用python控制Autocad:pyautocad方式
2020/06/01 Python
pycharm如何使用anaconda中的各种包(操作步骤)
2020/07/31 Python
Python urllib request模块发送请求实现过程解析
2020/12/10 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
韩都衣舍天猫官方旗舰店:天猫女装销售总冠军
2017/10/10 全球购物
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
Java和Javasciprt的区别
2012/09/02 面试题
教职工代表大会主持词
2014/04/01 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
2014年妇女工作总结
2014/12/06 职场文书
2015年校长新年寄语
2014/12/08 职场文书
办公室主任岗位职责
2015/01/31 职场文书
收银员岗位职责范本
2015/04/07 职场文书
幼儿园托班开学寄语(2015秋季)
2015/05/27 职场文书
大学生受助感言
2015/08/01 职场文书
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python
Python IO文件管理的具体使用
2022/03/20 Python
MySQL数据库之存储过程 procedure
2022/06/16 MySQL