导读:NumPy(Numerical Python的简称)是高性能科学计算和数据分析的基础包,提供了矩阵运算的功能。
在处理自然语言过程中,需要将文字(中文或其他语言)转换为向量。即把对文本内容的处理简化为向量空间中的向量运算。基于向量运算,我们就可以实现文本语义相似度、特征提取、情感分析、文本分类等功能。
作者:涂铭,刘祥,刘树春
如需转载请联系华章科技
NumPy提供了以下几个主要功能:
- ndarray——一个具有向量算术运算和复杂广播能力的多维数组对象。
- 用于对数组数据进行快速运算的标准数学函数。
- 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
- 非常有用的线性代数,傅里叶变换和随机数操作。
- 用于集成C /C++和Fortran代码的工具。
除明显的科学用途之外,NumPy也可以用作通用数据的高效多维容器,可以定义任意的数据类型。这些使得NumPy能无缝、快速地与各种数据库集成。
提示:这里提到的“广播”可以这么理解:当有两个维度不同的数组(array)运算的时候,可以用低维的数组复制成高维数组参与运算(因为NumPy运算的时候需要结构相同)。
本文NumPy的要点包括:
- 创建NumPy数组
- 获取NumPy中数组的维度
- NumPy数组索引与切片
- NumPy数组比较
- 替代值
- NumPy数据类型转换
- NumPy的统计计算方法
01 创建数组
在NumPy中,最核心的数据结构是ndarray,ndarray代表的是多维数组,数组指的是数据的集合。为了方便理解,我们来举一个小例子。
1. 一个班级里学生的学号可以通过一维数组来表示:数组名叫a,在a中存储的是数值类型的数据,分别是1,2,3,4。
其中a[0]代表的是第一个学生的学号1,a[1]代表的是第二个学生的学号2,以此类推。
2. 一个班级里学生的学号和姓名,则可以用二维数组来表示:数组名叫b
类似的,其中b[0,0]代表的就是1(学号),b[0,1]代表的就是Tim(学号为1的学生的名字),以此类推b[1,0]代表的是2(学号)等。
借用线性代数的说法,一维数组通常称为向量(vector),二维数组通常称为矩阵(matrix)。
当我们安装完Anaconda之后,默认情况下NumPy已经在库中了,所以不需要额外安装。我们来写一些语句简单测试下NumPy:
1)在Anaconda中输入,如果没有报错,那么说明NumPy是正常工作的。
In [1]: import numpy as np
稍微解释下这句语句:通过import关键字将NumPy库引入,然后通过as为其取一个别名np,别名的作用是为了之后写代码的时候方便引用。
2)通过NumPy中的array(),可以将向量直接导入:
vector = np.array([1,2,3,4])
3)通过numpy.array()方法,也可以将矩阵导入:
matrix = np.array([[1,'Tim'],[2,'Joey'],[3,'Johnny'],[4,'Frank']])
02 获取NumPy中数组的维度
首先我们通过NumPy中的一个方法arange(n),生成0到n-1的数组。比如我们输入np.arange(15),可以看到返回的结果是array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])。
之后再通过NumPy中的reshape(row,column)方法,自动构架一个多行多列的array对象。
比如我们输入:
a = np.arange(15).reshape(3,5) #代表3行5列
可以看到结果:
array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14]])
我们有了基本数据之后,可以通过NumPy提供的shape属性获取NumPy数组的维度。
print(a.shape)
可以看到返回的结果,这个是一个元组(tuple),第一个3代表的是3行,第二个5代表的是5列:
(3, 5)
03 获取本地数据
我们可以通过NumPy中genfromtxt()方法来读取本地的数据集。需要使用的数据集,house-prices.csv是由逗号(,)分隔的,在Github的data目录下能下载到。我们可以使用以下语句来读取这个数据集:
import numpy as npnfl = np.genfromtxt("D:/numpy/data/price.csv