对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实现的简单抽奖系统实例
May 22 Python
Python调用微信公众平台接口操作示例
Jul 08 Python
Python编程实现线性回归和批量梯度下降法代码实例
Jan 04 Python
Python实现重建二叉树的三种方法详解
Jun 23 Python
python实现图片识别汽车功能
Nov 30 Python
python的几种矩阵相乘的公式详解
Jul 10 Python
python写程序统计词频的方法
Jul 29 Python
详解用Python为直方图绘制拟合曲线的两种方法
Aug 21 Python
tensorflow自定义激活函数实例
Feb 04 Python
python对指定字符串逆序的6种方法(小结)
Apr 02 Python
Python读入mnist二进制图像文件并显示实例
Apr 24 Python
pd.drop_duplicates删除重复行的方法实现
Jun 16 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读取csv实现csv文件下载功能
2013/12/18 PHP
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
php实现ip白名单黑名单功能
2015/03/12 PHP
PHP微信网页授权的配置文件操作分析
2019/05/29 PHP
解密效果
2006/06/23 Javascript
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
Javascript 的addEventListener()及attachEvent()区别分析
2009/05/21 Javascript
jquery 得到当前页面高度和宽度的两个函数
2010/02/21 Javascript
Jquery优化效率 提升性能解决方案
2010/09/06 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
用JavaScript修改CSS属性的代码
2013/05/06 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
浅析JS运动
2015/12/28 Javascript
jQuery点击其他地方时菜单消失的实现方法
2016/04/22 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
VUE 全局变量的几种实现方式
2018/08/22 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
Python os模块学习笔记
2015/06/21 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
2018/06/22 Python
解析Python的缩进规则的使用
2019/01/16 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
用python制作个音乐下载器
2021/01/30 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
AT&T Wireless:手机、无限数据计划和配件
2018/06/03 全球购物
MIRTA官网:手工包,100%意大利制造
2020/02/11 全球购物
英语师范专业毕业生自荐信
2013/09/21 职场文书
生物制药自我鉴定
2014/01/25 职场文书
教师现实表现材料
2014/02/14 职场文书
给校长的建议书
2014/03/12 职场文书
房产转让协议书(2014版)
2014/09/30 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书
Django REST framework 限流功能的使用
2021/06/24 Python