近日梳理python3 的numpy的相关知识点,故自我整理成笔记发布,一是供大家评论和建议,查缺补漏自我知识框架,二是可以进一步熟悉知识,达到更好的融汇贯通的情况,希望看到的兄弟姐妹可以不吝赐教,感激不尽!
一维数组 二维数组 三维数组
2.1数组创建
1 列表转换法 import numpy as np list=[[1,2],[3,4],[5,6]] t=np.array (list2) print(t) 2 arange函数法 t=np.arange(24).reshape(4,6)
2.2数组的基本属性
查询数组的维度 print(t.ndim) 查询元素的个数 print(t.size) 1形状 查询 print(t.shape) 2改变 (1)原有的基础更改 t.shape=(3,2) print(t) (2)新设置的数组更改 x=t.reshape(3,2) print(x) 3改变维度 (1)通过行的方式 print(t.reshape((6,))) (2)通过列的方式 print(t.reshape((5,),order=‘F’) ) # 5代表是5个元素,默认是以行展开,order='F’是以列展开 的意思 4数组转化为list print(t.tolist())
3.1轴与广播机制 一维数组(axis=0) 二维数组 axis=0代表列;axis=1代表行 三维数组 axis=0代表高;axis=1代表列;axis=2代表行 3.2数组&数 print(t+/-/*//数字) 3.3数组&数组 1同种形状的数组 print(±*/数组,axis=0/1) 2不同形状,只能和一维数组进行计算,并且一维数组的行/列其中一个,必须和多维数组相同,否则不同形状数组不能进行计算 3.4常用函数 np.max/min(t1) print(np.max/minimum (t1,t2)) #两者相比取最值 np.mean(t) #取平均值 print(t.cumsum(0)) #列求和
4.1索引和切片(查找)
1)一维数组
t=np.arange(10) (1)冒号分隔切片参数 start:stop:step来进行切片操作 print(t[2:7:2])# 从2-7,每间隔两个进行取数 (2)如果只放置一个参数,如[2],将返回与该索引相对应的单个元素 print(t[2], t) (3)如果为[2:],表示从该索引开始以后的所有项都将被提取 print(t[2:])
2).二维数组
(1)取值 a.取连续的行 单一行 print(t[0]) print(t[0,:]) 多行 print(t[1:]) #取第二行到最后 print(t[1:3]) #取第二行到第三行 print(t[[1,3,5]]) #取第二行,第四行,第六行 b.取连续的列 单一列 print(t[:,1]) 多列 取第二列到最后 print(t[:,1:]) 取第二列到第三列 print(t[:,1:3]) 取第二列,第四列,第六列 print(t[[:,1,3,5]]) c.取不连续的值 取某一个值 print(t[3,2]) 取多个不连续的值 print([[0,1],[2,3]])
3)修改
(1)赋值 t[1:]=0 t[[0,1],[2,3]]=0 (2)逻辑 t[(t>10)&(t<23)]=0 和 t[(t>10)|(t<23)]=0 或 t[~(t>10)]=0 非 4.2添加(轴) 1新增 print(np.append(a,[5,3])) print(np.append(a,[[5,3]],axis=0)) print(np.append(a,[[5,3],[1,6]],axis=1)) (1)指定位置插入 print(np.insert(a,1,11,axis=1)) print(np.insert(a,1,[11],axis=0)) 2拼接 print(np.concatenate((t1,t2),axis=0)) (1)堆叠 print(np.stack((t1,t2),axis=0)) 3分割 print(np.split(t1,2)) 4.3删除 print(np.delete(a,2,axis=0)) 4.4去重 arr:输入数组,如果不是一维数组则会展开 retur_ index:如果为true,返回新列表元素在旧列表中的位置(下标),并以列表形式储 return_ Inverse:如果为true,返回旧列表元素在新列表中的位置(下标),并以列表形式储 return_ counts:如果为true,返回去重数组中的元素在原数组中的出现次数 a=np. array([[1,2,5],[3,4,6],[1,4,2]]) u=np.unique(a) u,indices=np.unique(a, return_counts=True) print(u) #输出去重后的展开数组 print(indices) #输出对应出现的次数
5.1特征
1.数据类型:float 2.nan!=nan #空值不相等 3.nan与任何数计算都是nan
5.2判断nan
print(t=t) # 利用上述特征第二条 print(np.isnan) #利用numpy自带的isnan函数进行判断 利用函数查看nan的数量 print(np.count_nonzero(t!=t))
5.3处理nan
1)删除(不影响数据的情况) 2)填充(平均数、中位数等) 步骤: 1.遍历数组,判断nan的个数是否为0; 2.不为0,取出存在nan那一行/列的非nan数据 3.对非nan数据求平均数/中位数 4.将以上的数值,赋值给nan
5.4案例
import numpy as np t=np,arange(24).reshape(4,6) t[2,3,6]=np.nan for i in range (t.shape[1]): #遍历所有列,行则为(t.shape[0]) a=t[:,i] #将每一列数据取出 b=np.count_nonzero(a!=a) #判断每一列中存在nan的个数 if b!=0: #如果个数不为0 c=np.mean(a[a==a]) #则取出存在nan列中不为nan的数并求平均值 a(np.isnan(a))=c #将平均值赋值给nan print(t)
另,笔者能力有限,若文章出现错误,也拜托大佬在评论区指出,马上进行更改,不要因为笔者能力问题造成影响,误人子弟;
本文未经本人允许,禁止转载,违者必究!
另,笔者能力有限,若文章出现错误,也拜托大佬在评论区指出,马上进行更改,不要因为笔者能力问题造成影响,误人子弟;
**