Numpy简介
Numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包。其部分功能如下:
①ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。⑤用于集成由C、C++、Fortran等语言编写的代码的工具。
创建数组
创建数组最简单的办法是使用array函数。它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的NumPy数组。以一个列表的转换为例:
data1=[6,7.5,8,0,1] #创建列表
arr1=np.array(data1) #转换为数组
arr1.dtype #数据类型保存在dtype对象中
data2=[[1,2,3,4],[5,6,7,8]] #创建嵌套序列(由等长列表组成的列表)
arr2=np.array(data2) #转换为多维数组
np.zeros(10) #创建指定长度(10)的全0数组
np.ones((3,6)) #创建指定长度的(3行6列二维)的全1数组
range(10) #创建指定数量的顺序列表(内置函数,默认0开始)
arange(10) #创建指定数量的顺序数组
eye(10) #创建一个正方的N×N单位矩阵
arr1=np.array([1,2,3],dtype=np.float64) #解释为特定数据类型
数组和标量之间的运算
arr=np.array([[1.,2.,3.],[4.,5.,6.]]) #创建二维数组
arr*arr #行列号相同的数组元素间运算
arr-arr
1/arr
arr*0.5
基本的索引与切片
arr=np.arange(10)
arr[5] #索引第6个元素
arr[5:8] #索引第6到第9个元素作为数组
arr[5:8]=12 #令第6到第9个元素等于12
arr_slice=arr[5:8] #数组切片是原始数据的视图,视图上的任何修改都会反映到原数组
arr_slice[:]=64 #将数组切片的全部元素改为64
arr[5:8].copy() #得到数组切片的一份副本
arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]])
arr2d[2] #索引二维数组第3行
arr2d[0][2] arr2d[0,2] #等价索引1行3列元素
arr2d[:2] #索引第1行和第2行(不含第3行)
arr2d[:,:1] #索引第1列
arr2d[:-2] #使用负数索引将从尾部开始选取行
数组转置和轴对换
arr=np.arange(15).reshape((3,5)) #生成顺序数组,后整形为3行5列
arr.T #转置
arr=np.random.randn(6,3) #randn函数生成一些正态分布的随机数组(6行3列)
np.dot(arr.T,arr) #利用np.dot计算矩阵内积XTX
通用函数:快速的元素级数组函数
通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数。
arr=np.arange(10)
np.sqrt(arr) #计算各元素的平方根(arr**0.5)
exp #计算各元素指数ex; abs #绝对值;
np.add(x,y) #x、y数组中对应元素相加; subtract #相减; multiply #相乘; divide #相除;
利用数组进行数据处理
用数组表达式代替循环的做法,通常称为矢量化
将条件逻辑表述为数组运算
Numpy.where函数是三元表达式x if condition else y的矢量化版本
xarr=np.array([1.1,1.2,1.3,1.4,1.5]) #两个数值数组
yarr=np.array([2.1,2.2,2.3,2.4,2.5])
cond=np.array([True,False,True,True,False]) #一个布尔数组
result=np.where(cond,xarr,yarr) #三元表达式
数学和统计方法
arr=np.random.randn(5,4)
arr.mean(); np.mean(arr); arr.sum();
arr.mean(axis=1) #计算该轴上的统计值(0为列,1为行)
用于布尔型数组的方法
arr=randn(100)
(arr>0).sum() #正值的数量
bools.any() #用于测试数组中是否存在一个或多个True
bools.all() #用于测试数组中所有值是否都是True
排序
arr=randn(8)
arr.sort()
arr=randn(5,3)
arr.sort(0) #二维数组按列排序; arr.sort(1) #二维数组按行排序;
唯一化
ints=np.array([3,3,3,2,2,1,1,4,4])
np.unique(names) #找出数组中的唯一值并返回已排序的结果
用于数组的文件输入输出
arr=np.arange(10)
np.save(‘some_array’,arr) #数组以未压缩的原始二进制格式保存在.npy文件中
np.load(‘some_array’) #通过np.load读取磁盘上的数组
np.savez(‘array_archive.npz’,a=arr,b=arr) #将多个数组以保存在一个压缩文件中
a=np.arange(0,12,0.5).reshape(4,-1)
np.savetxt(‘E:\\knakan\\a.txt’,a) #缺省按照’%.18e’格式保存数据,以空格分隔
np.loadtxt(‘E:\\kankan\\a.txt’)
np.savetxt(‘E:\\kankan\\a.txt’,a,fmt=”%d”,delimiter=”,”) #改为保存为整数,以逗号分隔
np.loadtxt(‘E:\\kankan\\a.txt’,delimiter=”,”) #读入时也需指定逗号分隔
线性代数
x=np.array([[1.,2.,3.],[4.,5.,6.]])
y=np.array([[6.,23.],[-1,7],[8,9]])
x.dot(y) #矩阵乘法,相当于np.dot(x,y)
[1]. 利用Python进行数据分析,wes McKinney著,唐学韬译,2014年,机械工业出版社