导读:NumPy是Python的基础,更是数据科学的通用语言。
本文简单介绍NumPy模块的两个基本对象ndarray、ufunc,介绍ndarray对象的几种生成方法及如何存取其元素、如何操作矩阵或多维数组、如何进行数据合并与展平等。最后说明通用函数及广播机制。
作者:吴茂贵,王冬,李涛,杨本法
如需转载请联系大数据(ID:hzdashuju)
NumPy为何如此重要?实际上Python本身含有列表(list)和数组(array),但对于大数据来说,这些结构有很多不足。因列表的元素可以是任何对象,因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3],都需要有3个指针和3个整数对象。
对于数值运算来说,这种结构显然比较浪费内存和CPU计算时间。至于array对象,它直接保存数值,和C语言的一维数组比较类似。但是由于它不支持多维,也没有各种运算函数,因此也不适合做数值运算。
NumPy(Numerical Python 的简称)的诞生弥补了这些不足,它提供了两种基本的对象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数。
NumPy的主要特点:
- ndarray,快速,节省空间的多维数组,提供数组化的算术运算和高级的广播功能。
- 使用标准数学函数对整个数组的数据进行快速运算,而不需要编写循环。
- 读取/写入磁盘上的阵列数据和操作存储器映像文件的工具。
- 线性代数,随机数生成,以及傅里叶变换的能力。
- 集成C、C++、Fortran代码的工具。
在使用 NumPy 之前,需要先导入该模块:
import numpy as np
01 生成ndarray的几种方式
NumPy封装了一个新的数据类型ndarray,一个多维数组对象,该对象封装了许多常用的数学运算函数,方便我们进行数据处理以及数据分析,那么如何生成ndarray呢?这里我们介绍生成ndarray的几种方式,如从已有数据中创建;利用random创建;创建特殊多维数组;使用arange函数等。
1. 从已有数据中创建
直接对python的基础数据类型(如列表、元组等)进行转换来生成ndarray。
(1)将列表转换成ndarray
import numpy as np list1 = [3.14,2.17,0,1,2] nd1 = np.array(list1) print(nd1) print(type(nd1))
打印结果:
[ 3.14 2.17 0. 1. 2. ] <class 'numpy.ndarray'>
(2)嵌套列表可以转换成多维ndarray
import numpy as np list2 = [[3.14,2.17,0,1,2],[1,2,3,4,5]] nd2 = np.array(list2) print(nd2) print(type(nd2))
打印结果:
[[ 3.14 2.17 0. 1. 2. ] [ 1. 2. 3. 4. 5. ]] <class 'numpy.ndarray'>
如果把(1)和(2)中的列表换成元组也同样适合。
2. 利用random模块生成ndarray
在深度学习中,我们经常需要对一些变量进行初始化,适当的初始化能提高模型的性能。通常我们用随机数生成模块random来生成,当然random模块又分为多种函数:
- random生成0到1之间的随机数;
- uniform生成均匀分布随机数;
- randn生成标准正态的随机数;
- normal生成正态分布;
- shuffle随机打乱