zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Numpy ndarray多维数组

numpy数组 多维 ndarray
2023-06-13 09:12:02 时间
在本章我们将正式走进 Numpy 数组的世界,在讲解过程中可能会设计到许多数学上概念,对于数学基础不扎实,或者已经遗忘的小伙伴要及时的查漏补缺,千万不要遇到不懂的概念就焦躁,或者不懂还要硬着头皮去读,这样是没有任何效果的,大家要有一个良好学习态度与心态。数据分析不是感性思维,它是逻辑思维与科学运算的产物,所以友情的提示大家,数学上的一些概念要及时的学习巩固。

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 数组方法以及它的相关属性。

24088.html

NumPypython数据结构