对numpy中shape的深入理解
作者:by_study 发布时间:2023-12-09 03:43:41
环境: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的返回值是一个元组,里面每个数字表示每一维的长度
来源:https://blog.csdn.net/by_study/article/details/67633593
猜你喜欢
- //获取字符数组String.prototype.ToCharArray=function() { &n
- 布尔类型是PHP中 最简单的类型。它的值可以为 TRUE 或 FALSE。如:$foo=false;$foo1=true;echo &quo
- 一、我希望画面尽量干净一点,这样看的人会舒服一点。撇开这个“设计常识”不谈,先回忆一些生活经验。设想一下你站在29楼阴暗的走廊里等待电梯,你
- 案例展示电影详情,传递电影的id.从search.vue传递到movie.vuemethods: {showMovie(e){var tra
- 如下所示:arrs=[2,15,48,4,5,6,7,6,4,1,2,3,6,6,7,4,6,8]f=open('test.txt&
- 这篇文章主要介绍了在SQL Server中处理空值时所涉及的3个问题:计数、使用空表值以及外键处理。用COUNT(*)处理空值大多数集合函数
- PDO::getAvailableDriversPDO::getAvailableDrivers — 返回一个可用驱动的数组(PHP 5 &
- 为了庆祝jQuery的四周岁生日, jQuery的团队荣幸的发布了jQuery Javascript库的最新主要版本! 这个版本包含了大量的
- 如果用户查询时,使用Order BY排序语句指定按员工编号来排序,那么排序后产生的所有记录就是临时数据。对于这些临时数据,Oracle数据库
- 在ASP中,为什么有时候刷新页面后,重新执行ASP代码时就连不上数据库了?这种情况一般发生在动态IP分配中,由于ASP连接数据库是定时的,默
- 人一旦习惯了某些东西就很难去改,以及各种各样的原因,新的浏览器越来越多,而老的总淘汰不了。增长总是快于消亡导致了浏览器兼容是成了谈不完的话题
- 数据文件 66001_.txt 内容格式:date,jz0,jz1,jz2,jz3,jz4,jz52012-12-28,0.9326,0.8
- ASP由于是一种古老的语言,它的一些功能对UTF-8支持非常差。比如,你想生成一个UTF-8格式的文件,使用常用的 scrīpting.Fi
- 一、介绍正则表达式各语言都有自己的规范,但是基本都差不多,都是由元字符的组合来进行匹配;由于Nmap内嵌的服务与版本探测是使用的Perl正则
- 惊现!表面下的隐藏信息——浅谈信息可视化1910年,病卧床上的魏格那(德国气象学家,以“大陆漂移学说”闻名),无意地注视着墙上的世界地图……
- 具体特征如下: 1、通过模板实现俄文正常。 2、通过后台数据库生成的静态俄文信息,后台显示正常, 前台乱码。 3、英文正常。 和该主题相关的
- 一 MySQL WorkbenchMySQL Workbench提供DBAs和developers一个集成工具环境:1)数据库设计和建模2)
- 对于小数据量,xml文件在检索更新上于ACCESS有很多优势。我曾经测试过不用数据库,把网站的会员信息,商品数据信息,交易信息,网站定制信息
- //创建组件 function createobj() { if (window.ActiveXObject) { return(new A
- 本文实例讲述了python读写配置文件操作。分享给大家供大家参考,具体如下:在用编译型语言写程序的时候,很多时候用到配置文件,作为一个约定的