1.Numpy数组
(1)创建数组
1)直接创建
a=np.array([1,2,3,4])
b=np.array([1,2,3,4],[5,6,7,8])
2)使用函数
b=np.arange(10)
linspace,ones,zeros,eye.randn,empty
(2)属性
ndim,shape,stride(跨度)
dtype(通过astype显示转换)
(3)索引和切片
1)一维
a[0],a[:4](半开),a[2:8:2](起始,结束,步长),a[::]
2)二维
a[0,0],a[0][0]
3)布尔数组
a[a%2==0]
&,|,~
4)花式索引
利用整数数组进行索引
arr[[4,0,3,6]]
arr[[1,5,7,2],[0,3,1,2]]
arr[[1,5,7,2]][:,[0,3,1,2]]
arr[np.ix_([1,5,7,2],[0,3,1,2])]
(4)2个注意点
1)Numpy总是试图自动把结果转换为行向量
2)Numpy数组是共享内存的,除非显示复制(.copy())
2.Numpy运算
(1)数组和标量
a+5(每个数加5)
a*3(每个数乘3)
比循环速度快
(2)数组和数组
1)维度相同
对应位置逐个元素进行运算(a+b,c*d)
矩阵内积np.dot()
矩阵外积np.multiply.outer(arr,np.arange(5))
2)维度不同
广播机制
针对布尔数组,可以使用all()/any()函数来返回布尔数组的标量值
(3)内置函数
1)线性代数 :dot,T,inv,qr,diag,trace,det,eig,solve,lstsq
2)随机数 :seed,rand,randint,randn,normal
3)将条件逻辑表述为数组运算:where(cond,x,y)当cond为True选x,否则选y
4)统计: sum,mean,std(标准差)var(方差),min,max,argmin,argmax,cumsum(所有元素的累计和),sumprod(所有元素的累计积)
5)合并和拆分:concatenate([arr1,arr2],axis=0)
6)元素重复操作: tile和repeat
7)花式索引: take和put
8)数组重塑:reshape,ravel(互逆过程),newaxis(传入-1,表示该维度大小由数据本身推断而来)
9)转置和轴对称:T或transpose
10)排序:sort(默认升序),argsort
11)唯一化:np.unique
12)多项式求解和多项式拟合:
创建 p=np.poly1d([1,-4,3]) #x^2-4*x+3
求根 p.roots
阶数 p.order
系数 p.coeffs
拟合 np.polyfit(x,y,n_order(阶数))
13)保存和读取: np.savetxt('a.txt',a),np.loadtxt('a.txt')
(4)通用函数
矢量化包装器
一元ufunc
abs,sqrt,square,exp,log,sign,ceil,floor,modf,isnan,isinf,cos,cosh,arccos
二元ufunc
add,substract,multiply,divide,power,maximum,minimum,mod,copysign
(5)C和Fortran顺序
C,矩阵行优先
Fortran,矩阵全都是列优先
!!!注意:axis,0表示按行计算,1表示按列计算。
参考书籍:
《利用Python进行数据分析》
《scikit-learn机器学习》