对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解析json实例方法
Nov 19 Python
python获取文件扩展名的方法
Jul 06 Python
python修改字典内key对应值的方法
Jul 11 Python
Python实现运行其他程序的四种方式实例分析
Aug 17 Python
python 矩阵增加一行或一列的实例
Apr 04 Python
Selenium定位元素操作示例
Aug 10 Python
使用 Python 实现微信群友统计器的思路详解
Sep 26 Python
利用ImageAI库只需几行python代码实现目标检测
Aug 09 Python
python实现超市商品销售管理系统
Oct 25 Python
python百行代码自制电脑端网速悬浮窗的实现
May 12 Python
Python2.x与3​​.x版本有哪些区别
Jul 09 Python
常用的10个Python实用小技巧
Aug 10 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中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
php数组的一些常见操作汇总
2011/07/17 PHP
php中删除字符串中最先出现某个字符的实现代码
2013/02/03 PHP
PHP对MongoDB[NoSQL]数据库的操作
2013/03/01 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
2017/06/06 PHP
php 可变函数使用小结
2018/06/12 PHP
laravel框架使用极光推送消息操作示例
2020/02/15 PHP
用javascript实现的激活输入框后隐藏初始内容
2007/06/29 Javascript
项目实践之javascript技巧
2007/12/06 Javascript
利用js动态添加删除table行的示例代码
2013/12/16 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
2015/12/25 Javascript
jQuery简单实现上下,左右滑动的方法
2016/06/01 Javascript
微信小程序 MD5加密登录密码详解及实例代码
2017/01/12 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
2018/02/27 jQuery
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
2018/06/13 Javascript
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
关于layui的动态图标不显示的解决方法
2019/09/04 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
2019/09/06 Javascript
vue实现抖音时间转盘
2019/09/08 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
Python中的with...as用法介绍
2015/05/28 Python
实例Python处理XML文件的方法
2015/08/31 Python
Python用threading实现多线程详解
2017/02/03 Python
解读python如何实现决策树算法
2018/10/11 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
2018/10/21 Python
python 动态生成变量名以及动态获取变量的变量名方法
2019/01/20 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
一款纯css3实现的非常实用的鼠标悬停特效演示
2014/11/05 HTML / CSS
香港网上花店:FlowerAdvisor香港
2019/05/30 全球购物
幼师自我鉴定
2014/02/01 职场文书
运动会入场词60字
2014/02/15 职场文书
学习型党组织心得体会
2014/09/12 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书
陪护人员误工证明
2015/06/24 职场文书
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle