Numpy ndarray多维数组
在本章我们将正式走进 Numpy 数组的世界,在讲解过程中可能会设计到许多数学上概念,对于数学基础不扎实,或者已经遗忘的小伙伴要及时的查漏补缺,千万不要遇到不懂的概念就焦躁,或者不懂还要硬着头皮去读,这样是没有任何效果的,大家要有一个良好学习态度与心态。数据分析不是感性思维,它是逻辑思维与科学运算的产物,所以友情的提示大家,数学上的一些概念要及时的学习巩固。
首先我们使用了
我相信仔细的小伙伴已经发现了 array.shape 这句代码,从打印的内容来看它对应的是 (2,3) 这一项,而这个元组恰恰表明的是 ndarray 数组的组成,即数组的维度构成。所以这里的描述指的就是 ndarray 数组的属性,不过这些属性并没有和数据本身放在一起,而是和数据分开存放。
将数据本身与描述性元数据分开存放的目的:一方面提高了内存空间的使用效率,另一方面减少了对数据本身的访问频率,从而了提高性能。依然以 data 为例:
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 数组方法以及它的相关属性。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算