numpy
学习内容
创建数组(矩阵):
a=np.array([1,2,3,4,5])
b=np.array(range(1,6))
c=np.arange(1,6)
按某种形式输出
t2=np.array([1,0,1,0],dtype='?')
print(t2)
print(t2.astype("i1"))
这里的dtype指创建数组的类型
t2.astype(“i1”)指按整数型输出
保留小数
print(np.round(t3,2))
关于数组的形状及转化
#数组形状
t1=np.arange(1,13).reshape(2,6)
print(t1)
print(t1.shape)
#reshape返回值是新数组
b=t1.reshape(3,4)
print(b)
#把数组转化成1维数组
b1=b.reshape(1,12)
print(b1)
print(b1.flatten())
数组之间的计算
#数组的加减乘除,是每个数都对应加减乘除
print(t1+1)
print(t1*3)
print(t1/2)
#数组和数组的计算
p1=np.array([[3,4,5,6,7,8],[4,5,6,7,8,9]])
p2=np.array([1,2,3,4,5,6])
print(p1*p2)
print(p1-p2)
p2=np.array([[1],[2]])
print(p1*p2)
print(p2*p1)#相同
#乘法是两个数组的列相同或某一个的列是1即可乘
转置
t=np.array([[0,1,2,3,4,5],[6,7,8,9,10,11],[12,13,14,15,16,17]])
#以下有三种转置方法(均为改变原数组)
print(t.transpose())
print(t.swapaxes(1,0))
print(t.T)
print(t)
数值及索引
按索引取出对应值
p=np.array([[0,1,2,3],[4,5,6,7],[8,9,10,11]])
print(p)
print("取第2行")
print(p[1])
print("取全部行,第3列")
print(p[:,2])
print("取第2行到第3行")
print(p[1:3])
print("取全部行,第3到4列")
print(p[:,2:4])
数值修改
#numpy中数值的修改(在原数组上修改)
t=np.arange(24).reshape(4,6)
t[:,2:4]=0
print(t)
三元运算符
#小于10变成0,否则变成10
print(np.where(t<10,0,10))
常用方法
#numpy中的clip(裁剪)
t=np.array([[ 0,1 ,2 , 3 , 4 , 5],
[ 6 , 7 , 8 ,9 ,10 ,11],
[12 ,13,14, 15,16 ,17],
[18 ,19, 20,np.nan,np.nan,np.nan ]])
print(t.clip(10,18))#小于1O的替换为1O,大于18的替换为了18
#numpy中常用统计函数
t=np.arange(24).reshape(4,6)
print("总和",t.sum(axis=None))#总和
print("列和",t.sum(axis=0))#列和
print("行和",t.sum(axis=1))#行和
print("均值",t.mean(axis=None))
print("中值",np.median(t,axis=None))
print("最大值",t.max(axis=None))
print("最小值",t.min(axis=None))
print("极值",np.ptp(t,axis=None))
print("标准差",t.std(axis=None))
#数组的拼接
t1=np.arange(12).reshape(2,6)
t2=np.arange(12,24).reshape(2,6)
print("竖直拼接",np.vstack((t1,t2)))
print("水平拼接",np.hstack((t1,t2)))
#数组的行列交换
t1=np.arange(12).reshape(3,4)
t1[[1,2],:]=t1[[2,1],:]
print("行交换",t1)
t1[:,[0,2]]=t1[:,[2,0]]
print("列交换",t1)
# t1=np.arange(12).reshape(3,4)
#拓展
print(t1)
print("获取最大(小)值位置",np.argmax(t1,axis=None))
#创建一个全0,1的数组
t3=np.zeros((3,4))
t3=np.ones((3,4))
#创建单位矩阵
t2=np.eye(3)
ps:数据缺失
#以每一列的均值填充该列的nan
def fill_nan_by_column_mean(t):
for i in range(t.shape[1]):
nan_num = np.count_nonzero(t[:, i][t[:, i] != t[:, i]]) # 计算非nan的个数if nan_num > 0:# 存在nan值
if nan_num>0:
now_col = t[:,i]
now_col_not_nan = now_col[np.isnan(now_col) == False].sum() # 求和now_col_mean = now_col_not_nan / (t.shape[0] - nan_num) # 和/个数now_col[np.isnan(now_col)] = now_col_mean #赋值给now_col
now_col_mean=now_col_not_nan/(t.shape[0]-nan_num)
now_col[np.isnan(now_col)]=now_col_mean
t[:, i] = now_col # 赋值给t,即更新t的当前列
t=t=np.array([[ 0,1 ,2 , 3 , 4 , 5],
[ 6 , 7 , np.nan ,9 ,10 ,11],
[12 ,13,14, np.nan,16 ,17],
[18 ,19, 20,21,22,23]])
fill_nan_by_column_mean(t)
print(t)