数据处理之Numpy
数据处理之Numpy
Numpy简介、Jupyter快捷键使用
(一)Numpy
Numpy 的英文全称为 Numerical Python,指Python 面向数值计算的第三方库。Numpy 的特点在于,针对 Python 内建的数组类型做了扩充,支持更高维度的数组和矩阵运算,以及更丰富的数学函数。Numpy 是 Scipy.org 中最重要的库之一,它同时也被 Pandas,Matplotlib 等我们熟知的第三方库作为核心计算库。
NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。
(二)Numpy包含内容
Numpy包括了:1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;3、用于整合C/C++和Fortran代码的工具包;4、实用的线性代数、傅里叶变换和随机数生成函数。Numpy和稀疏矩阵运算包scipy配合使用更加方便。
(三)Jupyter快捷键使用
内容
1. 数组的创建(创建全0数组,全1数组,随机数数组)
np.array([[1,2,3],[4,5,6]]) # 默认元素类型为int32
np.array([[1,2,3],[4,5,6]], dtype=np.int8) # 指定元素类型为int8
np.arange(5) # 默认元素类型为int32
np.arange(3,8, dtype=np.int8) # 指定元素类型为int8
np.linspace(1,2,5) # 从1到2生成5个浮点数
np.zeros((2,3)) # 全0数组
np.ones((2,3)) # 全1数组
np.eye(3) # 主对角线元素为1其他元素为0
np.random.random((2,3)) # 生成[0,1)之间的随机浮点数
np.random.randint(0,10,(3,2)) # 生成[0,10)之间的随机整数
2. 数组的属性(查看数组的维度,数组元素的个数)
numpy的数组对象除了一些常规的属性外,也有几个类似转置、扁平迭代器等看起来更像是方法的属性。扁平迭代器也许是遍历多维数组的一个简明方法。
a = np.array([[1,2,3],[4,5,6]])
a.dtype # 数组元素的数据类型
a.dtype.itemsize # 数组元素占据的内存字节数
a.itemsize # 数组元素占据的内存字节数
a.shape # 数组的维度
a.size # 数组元素个数
a.T # 数组行变列,类似于transpose()
a.flat # 返回一个扁平迭代器,用于遍历多维数组
for item in a.flat:
print item
3. 数组的维度操作(将数组的行变列,返回最后一个元素,返回第2到第4个元素,返回逆序的数组)
numpy数组的存储顺序和数组的维度是不相干的,因此改变数组的维度是非常便捷的操作,除resize()外,这一类操作不会改变所操作的数组本身的存储顺序。
a = np.array([[1,2,3],[4,5,6]])
a.shape # 查看数组维度
a.reshape(3,2) # 返回3行2列的数组
a.ravel() # 返回一维数组
a.transpose() # 行变列(类似于矩阵转置)
a.resize((3,2)) # 类似于reshape,但会改变所操作的数组
a
4. 数组的合并(数组的水平合并,垂直合并,深度合并)
数组合并除了下面介绍的水平合并、垂直合并、深度合并外,还有行合并、列合并,以及concatenate()等方式。假如你比我还懒,那就只了解前三种方法吧,足够用了。
a = np.arange(9).reshape(3,3)
b = np.arange(9,18).reshape(3,3)
a
b
np.hstack((a,b)) # 水平合并
np.vstack((a,b)) # 垂直合并
np.dstack((a,b)) # 深度合并
5. 数组的拆分(数组的水平拆分,垂直拆分,深度拆分)
拆分是合并的逆过程,概念是一样的,但稍微有一点不同:
a = np.arange(9).reshape(3,3)
np.hsplit(a, 3) # 水平拆分,返回list
np.vsplit(a, 3) # 垂直拆分,返回list
a = np.arange(27).reshape(3,3,3)
np.dsplit(a, 3) # 深度拆分,返回list
6. 数组运算(与常的四则运算,与数组的四则运算,判断数组是否相等)
数组和常数的四则运算,是数组的每一个元素分别和常数运算;数组和数组的四则运算则是两个数组对应元素的运算(两个数组有相同的shape,否则抛出异常)。
a = np.arange(4, dtype=np.float32).reshape(2,2)
b = np.arange(4, 8, dtype=np.float32).reshape(2,2)
a+2 # 数组和常数可以进行四则运算
a/b # 数组和数组可以进行四则运算
a == b # 最神奇的是,数组可以判断对应元素是否相等
(a == b).all() # 判断数组是否相等
特别提示:如果想对数组内符合特定条件的元素做特殊处理,下面的代码也许有用。
a = np.arange(6).reshape((2,3))
a
(a>2)&(a<=4)
a[(a>2)&(a<=4)]
a[(a>2)&((a<=4))] += 10
a
7. 数组的常用函数(数组所有元素的和、积、平均值、最大值、最小值、元素替换、方差、标准差)
数组对象本身提供了计算算数平均值、求最大最小值等内置方法,numpy也提供了很多实用的函数。为了缩减篇幅,下面的代码仅以一维数组为例,展示了这些方法和函数用法。事实上,大多数情况下这些方法和函数对于多维数组同样有效,只有少数例外,比如compress函数。
a = np.array([3,2,4])
a.sum() # 所有元素的和
a.prod() # 所有元素的乘积
a.mean() # 所有元素的算数平均值
a.max() # 所有元素的最大值
a.min() # 所有元素的最小值
a.clip(3,4) # 小于3的元素替换为3,大于4的元素替换为4
a.compress(a>2) # 返回大于2的元素组成的数组
a.tolist() # 返回python的list
a.var() # 计算方差(元素与均值之差的平方的均值)
a.std() # 计算标准差(方差的算术平方根)
a.ptp() # 返回数组的最大值和最小值之差
a.argmin() # 返回最小值在扁平数组中的索引
a.argmax() # 返回最大值在扁平数组中的索引
np.where(a == 2) # 返回所有值为2的元素的索引
np.diff(a) # 返回相邻元素的差
np.log(a) # 返回对数数组
np.exp(a) # 返回指数数组
np.sqrt(a) # 返回开方数组
np.msort(a) # 数组排序
a = np.array([1,4,7])
b = np.array([8,5,2])
np.maximum(a, b) # 返回多个数组中对应位置元素的最大值数组
np.minimum(a, b) # 返回多个数组中对应位置元素的最小值数组
np.true_divide(a, b) # 对整数实现真正的数学除法运算
参考
《基于python的数据分析三剑客》