numPy包:(科学计算) import numpy as np
NumPy(Numeric Python)是高性能科学计算和数据分析的基础包。
NumPy模块提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库等。
1)、ndarray,一个具有矢量运算和复杂广播能力的快速且节省空间的多维数组
2)、用于对整组数据进行快速运算的标准数学函数(无需编写循环)
3)、用于读写磁盘数据的工具以及用于操作内存映射文件的工具
4)、实用的线性代数、傅里叶变换和随机数生成函数。
5)、用于集成由C/C++和Fortran代码的工具包
6)、比较成熟的(广播)函数库;
data.shape (表示各维度大小的元组) data.dtype (用于表明数组数据类型的对象)
data.ndim (行纬度的大小)
zeros和ones分别可以创建指定长度或形状的全0或全1数组;np.zero(10) np.zeros((3,6))
zeros_like和ones_like 以另一个数组为参数,并根据其形状和dtype创建一个全0或1数组
empty可以创建一个没有任何具体值的数组(多数情况下是一些未初始化的垃圾值,而非全0),也有相似的empty_like函数; np.empty((2,3,2))
np.arange(15) 生成0-14的数组(是Python内置函数range的数组版),返回的是一个ndarray而不是列表
eye、identity 创建一个正方的N*N单位矩阵(对角线为1,其余为0) np.identity(n, dtype=None) 、np.eye(N, M=None, k=0, dtype=<type ‘float’>);
np.identity只能创建方形矩阵。np.eye可以创建矩形矩阵,且k值可以调节,为1的对角线的位置偏离度,0居中,1向上偏离1,2偏离2,以此类推,-1向下偏离。值绝对值过大就偏离出去了,整个矩阵就全是0了。
data.astype(np.int32) 将data的数据类型转化为int32, 如果将浮点数转换成整数,则小数部分将会被截断;如果字符串数组表示的全是数字,也可用此将其转化为数值形式
data.astype(array.dtype) 将data的数据类型转换为与array一样的数据类型
注意:调用astype无论如何都会创建一个新的数组(原始数据的一份拷贝),即使新dtype和老dtype相同也是如此
基本的索引
arr=array([0,1,2,3,4,5,6,7,8,9]) =》 arr[5:8]=array([5,6,7]) 前有后无
arr3d=array([[[1,2,3],
[4,5,6]], =》 arr3d[1,0] = array([7,8,9])
[[7,8,9],
[10,11,12]] ])
=》 arr3d[1,0] = array([7,8,9])
切片
arr2d=array([[1,2,3],
[4,5,6], =》 arr2d[:2] = array([1,2,3],[4,5,6]])
[7,8,9] ]) =》 arr2d[:2,1:]=array([[2,3],[5,6]])
=》 arr2d[1,:2]=array([4,5])
布尔型索引和赋值
布尔型数组的长度必须跟索引的轴长度一致!
若想得到的是ndarray切片的一份副本而非视图,就需要显式地进行复制操作,例如:arr[5:8].copy()
花式索引
arr=array([[ 0,0,0,0],
[ 1,1,1,1], =》arr[ [4,3,0,6] ] =array([[ 4,4,4,4],
[ 2,2,2,2], [ 3,3,3,3],
[ 3,3,3,3], [ 0,0,0,0],
[4,4,4,4], [ 6,6,6,6] ])
[ 5,5,5,5], =》arr[ [-3,-5,-7] ]=array([[ 5,5,5,5],
[ 6,6,6,6], [ 3,3,3,3],
[ 7,7,7,7] ]) [ 1,1,1,1] ])
arr=array[[0,1,2,3],
[4,5,6,7], =》arr[ [1,5,7,2],[0,3,1,2] ] = array ( [ 4,23,29,10 ] )
[8,9,10,11], =》 arr[ [1,5,7,2] ] [:,[ 0,3,1,2]]
[12,13,14,15], = array( [ [ 4,7,5,6],
[16,17,18,19], [20,23,21,22],
[20,21,22,23], [28,31,29,30],
[24,25,26,27], [8,11,9,10 ] ])
[28,29,30,31] ])
花式索引跟切片不一样,它总是将数据复制到新数组中
数组转置 arr.T ,还有transpose(对于高维数组,其需要得到一个由轴编号组成的元组才能对这些轴进行转置)
通用函数:快速的元素级数组函数
np.sqrt(arr) np.exp(arr) np.maxinum(x,y) #x与y元素级的最大值
利用数组进行数据处理
np.where(cond,xarr,yarr) = [( x if c else y ) for x,y,c in zip(xarr,yarr,cond )]
还可嵌套成更复杂的形式
数据和统计方法
sum、mean以及标准差std等聚合计算既可以当作数组的实例方法调用,也可以当作顶级NumPy函数使用:
mean和sum这类的函数可以接受一个axis参数(用于计算该轴向上的统计值),最终结果是一个少一维的数组
comsum和cumprod之类的方法则不聚合,而是产生一个由中间结果组成的数组
argmin、argmax分别为最大和最小元素的索引
用于布尔型数组的方法
sum可用来对布尔型数组中的true计数:(arr>0).sum() #正值的数量
arr.any() arr.all() any用于测试数组中是否存在一个或多个true,而all则检查数组中所有值是否都是true
排序
arr.sort() 升序排序,多维数组可以在任何一个轴向上进行排序,只需将轴编号传给sort即可
顶级方法np.sort返回的是数组的已排序的副本,而就地排序则会修改数组本身。计算数组分位数最简单的办法就是对其进行排序,然后选取特定位置的值
唯一化以及其他的集合逻辑
np.unique(data) 用于找出数组中的唯一值并返回已排序的结果 = sorted(set(data)) (纯python代码)
np.in1d(data,array) 用于测试array数组中的值是否存在于data数组中,返回一个布尔型数组
用于数组的文件输入输出:numPy能够读写磁盘上的文本数据或二进制数据
将数组以二进制格式保存到磁盘
np.save和np.load是读写磁盘数组数据的两个主要函数。默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中的。若文件路径末尾没有扩展名.npy,则该扩展名会被自动加上。
通过np.savez可以将多个数组保存到一个压缩文件中,将数组以关键字参数的形式传入即可
存取文本文件
np.loadtxt(' array_ex.txt ', delimiter=',' ) 加载txt文件,以逗号为分割
np.savetxt 将数组写到以某种分隔符隔开的文本中
线性代数
矩阵乘法x.dot(y) 或者np.dot(x,y)
from numpy.linalg import inv,qr这样
随机数生成
numpy.random模块对Python内置的random进行了补充,增加了一些用于高效生成多种概率分布的样本值的函数。