Numpy
->ndarray的基本操作
->创建:arr=np.array([]),np.random.randint(a,b,size=(r,c))
单位矩阵:行=列,主对角线为1,其余为0,arr.eye(a)
标准正态分布随机数(均值为0,标准差为1):arr=np.random.randn(r,c)/arr=np.random.randn(x)
随机矩阵:arr = np.random.rand(r.c)
->查找:arr.shape,arr.dtype,arr.size
np.linspace(a,b,space),一维:arr[index]
二维:arr[index_r,index_c](切片:下标可用":",代表一整行/列。":"左右两边可用数字,代表起始和终点,左闭右开)
->修改:arr_2_6=arr.reshape(2,6),flat=arr_2_6.flatten()
行列对调:arr.transpose()/arr.T
小结:
和Python原生数组的区别是
Numpy是同质量类型(数据类型全相同),
向量化操作(arr_1+arr_2,对应下标值会相加,和数学中向量的加减乘除类似),
Python原生是内存不连续的,Numpy内存是连续的。
用索引访问返回的是副本(分配新的内存,修改副本后原数组不会变化),切片(":")返回的是试图(共用内存,修改视图后原数组也会变化)。
形状变换不会改变内存,只改变视图。
->广播
->之所以叫广播,是因为“补齐”操作没有修改内存,而是复用原有内存里存的值,像一个区域对广大区域广播一样。可以是广播一点,也可以广播一行。
暂时无法在飞书文档外展示此内容
小结:
从后往前比较维度,兼容就扩展为相同大小。
->数学运算
->均值:求每行比均值ave=arr.mean(axis=1,keepdims=True),keepdims=True:假如有两行,各自求了两行的均值后,数组是[ave_1,ave_2],加了这个参数后[[ave_1],[ave_2]],便于后续的运算。每个数字减去均值后,有大于0等于0、小于0三种情况,可以明显的反应出与均值的差异,这个操作叫做去中心化。
->最大值:np.max(arr),不加axis,默认全部数据里求。
->最大值下标:np.argmax(arr),不加axis,默认全部数据里求。
->标准差:np.std(arr),不加axis,默认全部数据里求。可以看出数据的波动性。
->累计和:np.cumsum(arr, axis=0/1)。arr=[1,2,3],arr_=np.cumsum(arr,axis=1),arr=[1,1+2,1+2+3]。
->求和:np.sum()。
->高级索引
->花式(数组)索引:arr[[2,3,4]](取出2,3,4行),arr[[2,3],[4,5]](取出[2,4]和[3,5]),返回的是副本。
->布尔索引:arr[arr>5](取出大于5的元素)。
->组合条件:arr[arr>5 & arr<8](取出大于5小于8的元素)。支持&、|、!(与、或、非)。
小结:
花式索引返回的是副本。
->数组合并与分割
->合并:np.vstack((a,b))(垂直合并,列数相同),np.hstack((a,b))(水平合并,行数相同),np.concatenate((a,b),axis=0)(通过合并,axis指定轴)。
->分割:np.vsplit(arr,3)(垂直均分为3份),np.hsplit(arr,3)(水平均分为3份),np.split(arr,3,axis=1)(通用均分,可传入axis参数),np.split(arr,[2,3])(指定具体怎么分)。
-
第 1 段:索引
0到1(即arr[:2],不包含索引 2)。 -
第 2 段:索引
2到4(即arr[2:5],包含 2,不包含 5)。 -
第 3 段:索引
5到末尾(即arr[5:],包含 5)。
小结:
合并时列数/行数要注意是否相同。
->文件操作
浙公网安备 33010602011771号