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 段:索引 01(即 arr[:2],不包含索引 2)。

  • 第 2 段:索引 24(即 arr[2:5],包含 2,不包含 5)。

  • 第 3 段:索引 5 到末尾(即 arr[5:],包含 5)。

小结:

合并时列数/行数要注意是否相同。

->文件操作

posted @ 2026-07-05 18:41  Eli4uk  阅读(5)  评论(0)    收藏  举报