对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 相关文章推荐
Python3.0与2.X版本的区别实例分析
Aug 25 Python
详解Python使用simplejson模块解析JSON的方法
Mar 24 Python
利用Python破解斗地主残局详解
Jun 30 Python
python将文本分每两行一组并保存到文件
Mar 19 Python
python3 requests中使用ip代理池随机生成ip的实例
May 07 Python
在windows下Python打印彩色字体的方法
May 15 Python
Python实现的远程登录windows系统功能示例
Jun 21 Python
如何分离django中的媒体、静态文件和网页
Nov 12 Python
基于python实现蓝牙通信代码实例
Nov 19 Python
使用python实现画AR模型时序图
Nov 20 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
Apr 13 Python
python字符串常规操作大全
May 02 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
PHP操作FTP类 (上传、下载、移动、创建等)
2016/03/31 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
2019/06/25 PHP
图片之间的切换
2006/06/26 Javascript
javascript编程起步(第七课)
2007/01/10 Javascript
利用jquery的获取JS文件中的字符串内容
2012/02/14 Javascript
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
2013/08/02 Javascript
Nodejs全栈框架StrongLoop推荐
2014/11/09 NodeJs
jQuery中Ajax的get、post等方法详解
2015/01/20 Javascript
JQuery异步获取返回值中文乱码的解决方法
2015/01/29 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
javascript实现跨域的方法汇总
2015/06/25 Javascript
Jquery幻灯片特效代码分享--打开页面随机选择切换方式(3)
2015/08/15 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
2016/10/21 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
2016/10/28 Javascript
jQuery实现联动下拉列表查询框
2017/01/04 Javascript
vue-cli 3.x 修改dist路径的方法
2018/09/19 Javascript
实用的Vue开发技巧
2019/05/30 Javascript
express + jwt + postMan验证实现持久化登录
2019/06/05 Javascript
[02:57]DOTA2亚洲邀请赛小组赛第四日 赛事回顾
2015/02/02 DOTA
[51:44]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第二场
2018/04/04 DOTA
Python open读写文件实现脚本
2008/09/06 Python
Python中用于计算对数的log()方法
2015/05/15 Python
python机器学习实战之K均值聚类
2017/12/20 Python
解决pycharm 远程调试 上传 helpers 卡住的问题
2019/06/27 Python
吃透移动端 Html5 响应式布局
2019/12/16 HTML / CSS
英国信箱在线鲜花速递公司:Bloom & Wild
2019/03/10 全球购物
八年级美术教学反思
2014/02/02 职场文书
考试作弊检讨书大全
2014/02/18 职场文书
祖国在我心中演讲稿600字
2014/05/04 职场文书
党员反对四风思想汇报范文
2014/10/25 职场文书
亮剑观后感
2015/06/05 职场文书
小学体育教学随笔
2015/08/14 职场文书
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python
浅谈Python数学建模之固定费用问题
2021/06/23 Python