Numpy 完结
Numpy(Numerical Python):是Scipy \ Scikit-Learn等的通用底层语言;
一、array
1、array本身的属性:
shape 返回的是数组;
ndim
size
dtype
可以通过.访问:a.shape a.ndim a.size a.dtype
2、创建array的方法:
1、从python list来或np.array()
2、预定函数:arange,ones/ones_like,zeros/zero_like,empty/empty_like,full/full_like,eye;
full: 全是某个数值;
empty:空的或接近于0的数值;
3、np.random模块
.randn 具有标准正台分布
randint(min,max,个数)
3、array本身支持大量的操作和函数
1、直接逐元素相加
2、面向多维的索引
3、求sum/mean等聚合函数
4、线性代数函数,如逆矩阵等
5、np.sin np.exp
data = np.random.random((10,20))
0-1的随机数;
data = np.random.randint(5,size=(100,1))
最小值为第一个数;后面是size
可以实现one_hot编码: 虽然不明白,记住吧;
one_hot = np.eye(NCLASSES)[np.array(label, np.int32)]
二、索引
numpy的切片修改会修改原来的数组;
1、基础索引:一维索引与list一致;
二维矩阵索引:x[0][2] 跟 x[0,2]一致; ‘,’逗号前是行索引;逗号后是列索引
2、神奇(花式)索引:x[[0,2]] 两个中括号 第0、2行 等价于 x[[0,2],:]
x[[0,1,2],[1,3,4]]:返回的是 (0,1),(1,3), (2,4)位置 看逗号位置
3、布尔索引
c=np.arange(12).reshape(3,4)
c=c[c>5]
三、randomm模块
random.seed(x) | 设定随机种子 |
random.rand(d0,d1...dn) | (0,1)间 均匀分布 |
random.randn(d0,d1...dn) | 均值为0,方差为1 |
random.randint(low[,high,size,dtype]) | 指定high[low,high),不指定[0,high) |
random.random([size]) | (0.0,1.0) |
random.shuffle(x) | 对数组x进行随机排列直接修改,若多维,只会在第一维打散数据,x |
random.normal([loc,scale,size]) | 均值,方差,尺寸 |
random.uniform([low,high,size])9219921921 | float型 |
四、数学统计分析
1、常见的统计函数
np.sum | 所有元素和 |
np.prod | 所有元素乘 |
np.cumsum | 元素的往前累积加和 |
np.cumprod | 元素的往前累积加乘 |
np.min np.max np.mean | 最小值 最大值 平均 |
np.average | 加权平均 |
np.median | 中位数 |
np.percentile(arr,[25,75,100]) | 0-100百分位数 |
np.quantile(arr,[25,75,100]) | 0-1分位数 |
np.std | 标准差 |
np.var | 方差 |
- weights = np.random.rand(*aa.shape)
- bb=np.average(aa,weights=weights)
- print(bb)
*用来拆分元组;
2、按不同维度axis计算
axis=0 把行消灭掉,跨行计算;重力往下;
axis=1 把列消灭掉,跨列计算;F1往右;
np.sum(axis=0)
机器学习中:
行:代表一个样本数据;
列:代表样本的特征;
- #每列均值及方差
- arr = np.arange(12).reshape(3,4)
- mean = np.mean(arr,axis=0)
- std = np.std(arr,axis=0)
- result_std = (arr-mean)/std
- print(result_std)
或者下面直接一个语句就行;
- result_std = (arr-np.mean(arr,axis=0))/np.std(arr,axis=0)
五、数组升维的三种方式:
1、np.newaxis关键字:其实就是个None
- #添加行维度
- bb = arr[np.newaxis,:]
- #添加列维度
- cc = arr[:,np.newaxis]
2、np.reshape(arr, newshape)方法方法
- #-1还可以自动算行或列
- a = np.reshape(arr,(1,-1))
3、np.expand_dims方法:
- dd = np.expand_dims(arr,axis=0)
六、数组的合并
1、添加行:如添加样本
2、添加列:如添加特征;
np.concatenate(array,axis=0/1) 沿着axis进行数组合并,默认为0
concatenate可以实现下面两个功能;
np.vstack(arr)或row_stack 垂直合并 vertically
np.hstack(arr)或np.column_stack 水平合并 horizontally
七、数组排序
共三种:
np.sort(arr) 返回排序后的数组,不会改变arr本身
arr.sort() 改变arr本身
np.argsort(arr) 返回的是索引
python的排序用sorted;
八、数组的乘法
1、*符号或者np.multiply():逐元素乘法:shape要相同
2、@符号或者np.matmul():矩阵乘法 (n,k),(k,m)->(n,m)
3、np.dot:点积(内积)乘法,乘后相加;
np.dot 与 np.sum(np.multiply()) 一致的
numpy中的一维数组可以认为是行或列向量;
九、数组读写到文件
表格类数据一般用pandas;
npy和npz都是二进制格式文件,纯文本编辑器打开是乱码;
1、np.load(filename): npy单个数组或npz多个数组的字典:
2、np.save(filename,arr): 单个numpy数组保存到npy文件;
3、np.savez(filename,arra=arra,arrb=arrb):多个numpy数组保存到npz未压缩文件;
4、np.savez_compressed(filename,arra=arra,arrb=arrb):并压缩;
示范1:np.load 及np.save 格式.npy
- arra = np.arange(12).reshape(3,4)
- np.save('arra.npy',arra)
- arrb=np.load('arra.npy')
示范2:np.savez \ savez_compressed 格式要改成.npz 用字典访问;
- arra = np.arange(12).reshape(3,4)
- arrc = np.random.rand(5,4)
- np.savez('arr_ac.npz',arra=arra,arrc=arrc)
- arrb=np.load('arr_ac.npz')
- print(arrb['arra'])