对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 k-近邻算法实例分享
Jun 11 Python
用Python编写分析Python程序性能的工具的教程
Apr 01 Python
python实现线程池的方法
Jun 30 Python
Python简单实现socket信息发送与监听功能示例
Jan 03 Python
python读取文件名称生成list的方法
Apr 27 Python
python pandas读取csv后,获取列标签的方法
Nov 12 Python
pyqt远程批量执行Linux命令程序的方法
Feb 14 Python
flask应用部署到服务器的方法
Jul 12 Python
Python爬虫:url中带字典列表参数的编码转换方法
Aug 21 Python
解决django后台管理界面添加中文内容乱码问题
Nov 15 Python
Pycharm同步远程服务器调试的方法步骤
Nov 04 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
Jan 11 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编程效率的53个要点(经验小结)
2010/09/04 PHP
php 判断字符串中是否包含html标签
2014/02/17 PHP
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
图像替换新技术 状态域方法
2010/01/28 Javascript
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
2013/11/25 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
2016/01/28 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
原生JS和jQuery版实现文件上传功能
2016/04/18 Javascript
在一个页面重复使用一个js函数的方法详解
2016/12/26 Javascript
利用 spin.js 生成等待效果(js 等待效果)
2017/06/25 Javascript
for循环 + setTimeout 结合一些示例(前端面试题)
2017/08/30 Javascript
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
VueJs组件之父子通讯的方式
2018/05/06 Javascript
Vue.js添加组件操作示例
2018/06/13 Javascript
js中arguments对象的深入理解
2019/05/14 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
[04:14]从西雅图到上海——玩家自制DOTA2主题歌曲应援TI9
2019/07/11 DOTA
[01:09:13]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第三场 1月19日
2021/03/11 DOTA
go和python调用其它程序并得到程序输出
2014/02/10 Python
在Python中使用__slots__方法的详细教程
2015/04/28 Python
Python使用chardet判断字符编码
2015/05/09 Python
讲解Python中运算符使用时的优先级
2015/05/14 Python
python中偏函数partial用法实例分析
2015/07/08 Python
python实现二分查找算法
2017/09/21 Python
Python基于opencv调用摄像头获取个人图片的实现方法
2019/02/21 Python
Python vtk读取并显示dicom文件示例
2020/01/13 Python
video实现有声音自动播放的实现方法
2020/05/20 HTML / CSS
西班牙鞋子和箱包在线销售网站:zapatos.es
2020/02/17 全球购物
初级会计求职信范文
2014/02/15 职场文书
毕业设计论文评语
2014/12/31 职场文书
公路施工安全责任书
2015/05/08 职场文书
2015年度企业工作总结
2015/05/21 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
Java实现注册登录跳转
2022/06/16 Java/Android