1. 什么是ndarray多维数组?
1) 生成随机ndarray多维数组
ndarray 是 Numpy 中的多维数组,数组中的元素具有相同的类型,且可以被索引,它由两部分组成一个数据本身,也就是实际数据,另一个是描述属于的元数据;大家读到这里,就可能产生了疑惑,首先是多维数组,可能对这个概念有些模糊,还有就是 ndarray 与我们之前接触过的 Python 内建数据结构并不相同,对它的两部分组成更是蒙圈,不要紧,那么我们就先上一段代码,直接生成一个 ndarray 多维数组,如下所示:
#在 ipython中完成下面代码 In [1]: import numpy as np In [2]: data=np.random.randn(2,3) In [3]: data Out[3]: array([[-1.47441959, 0.3962004 , -0.71924289], [-2.49313992, -1.16219399, 0.74342602]]) In [4]: data*10 Out[4]: array([[-14.74419592, 3.96200397, -7.19242891], [-24.93139917, -11.62193989, 7.43426025]]) In [5]: data+data Out[5]: array([[-2.94883918, 0.79240079, -1.43848578], [-4.98627983, -2.32438798, 1.48685205]])
首先我们使用了as np
的方式进行导入,这是官方推荐的导包方法,在后续若出现了以 as 的方式导包的情况就不再做说明了。然后使用了 Numpy 的 random.randn 方法随机生成了一个 2 行 3 列 的 2 维数组,若是 3 行 3 列的话,我们也可以把它叫做是矩阵。最后我们分别对 data 数组进行了 *10 和 +data 的操作,从结果老看,会感觉不可思议,这些操作直接对 data 的数据本身进行了操作。
提示:一维可以理解为由一系列点构成的线,二维可以是一个平面由长宽构成,三维就是一个空间概念了,比如长方体、正方体等,即由长宽高构成三维。
每一维用一个 [] 括起,不同维之间用 , 逗号间隔,最后总体再用 [] 括起来,最快验证自己创建的数组是否满足自己的维度需求的方式,就是看打印的结果中,最外面有几个 ]
中括号,有几个 ]
就是几维数组,如果让你随机生成一个三维数组,你会了吗?
#生成随机三维数组 In [11]: data=np.random.randn(4,2,3) In [12]: data Out[12]: array([[[-1.08631143, -2.13156405, -0.24601211], [ 0.36618268, 0.85528583, 1.04413612]], [[-0.1501994 , -0.56584489, -0.21236547], [-0.43745068, -1.09316937, 0.05280093]], [[-0.06530559, -0.35711274, 0.21184572], [ 2.11948393, 0.88514508, 1.22061786]], [[ 0.45099358, -0.97586603, 0.06857976], [ 0.12879119, 1.28446636, 0.17388125]]])
可以简单这样理解,列表肯定是一维的,多个列表一行一行堆叠形成二维,多个这样的二维构成三维,以此类推可得更高维矩阵。我们可以使用 np.array() 方式创建一个多维数组,如下所示:
ln [1] import numpy as np In [2]: array=np.array([[1,2,3],[5,6,7]]) In [3]: print(type(array),array,array.shape) <class 'numpy.ndarray'> [[1 2 3],[5 6 7]] (2, 3)
2. ndarray数组对象的构成
那么在本节刚开始的时候,我们说过 ndarray 对象由两个部分组成,一个数据本身,另一个是数据的描述。数据本身通过上面的例子我们已经了解了,那么数据的描述又是怎么回事呢?
我相信仔细的小伙伴已经发现了 array.shape 这句代码,从打印的内容来看它对应的是 (2,3) 这一项,而这个元组恰恰表明的是 ndarray 数组的组成,即数组的维度构成。所以这里的描述指的就是 ndarray 数组的属性,不过这些属性并没有和数据本身放在一起,而是和数据分开存放。
将数据本身与描述性元数据分开存放的目的:一方面提高了内存空间的使用效率,另一方面减少了对数据本身的访问频率,从而了提高性能。依然以 data 为例:
In [8]: data.shape #shape属性表明数组的维度结构 Out[8]: (2, 3) In [9]: data.dtype #dtype属性表明数组中数据类型 Out[9]: dtype('float64') In [10]: print(type(data),data,data.shape) <class 'numpy.ndarray'> [[-1.47441959 0.3962004 -0.71924289] [-2.49313992 -1.16219399 0.74342602]] (2, 3)
本节主要针对 ndarray 数组对象做了基本介绍,在下一节中,我们会讲解创建 ndarray 数组方法以及它的相关属性。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/24088.html