numpy 数组
np 的切片是形成视图, 切片内容修改 ,原型也会修改
arr[a:b].copy() 是复制
查看数组的形状: a.shape()
修改数组的形状: a. reshape()
降低数组的维度为一维: a.flatten()
查看数组的行 a.ndim()
data[~(names == 'Bob')] ~ 反条件
数组的加减乘除 遵循广播原则
对二维: 行为0 ,列为1 对于三维, 深度为0 ,行为1, 列为2
数组的转置: t.swapaxes(1,0) t.transpose() t.T
numpy 读取数据 :np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)
fname:文件,字符串或产生器,可以是.gz或bz2压缩文件delimier 分割字符串,默认为空格,改为逗号 skiprows 跳过前X行
usecols 读取指定的列,索引,元组类型
unpack 表示转置 如果True 读入属性将分别写入不同数组变量, False, 读入数据值值写入一个数组变量,默认false
numpy 三元运算 np.where(t<10, 0 ,10)
inf (-inf, inf): infinity ,inf 表示正无穷,加符号的表示负无穷
两个nan是不相等的, np.nan !=np.nan
判断组中nan的个数: np.count_nonzero(t !=t)
将nan值替换掉 t[np.isnan(t)] = 0
矩阵乘法: np.dot(x,x.T)
np.meshgrid函数接受两个一维数组,并产生两个二维矩阵
a.cumsum() 是累加函数
a.any() 是否有True
a.all() 是否都是True
a.in1d(a,b) 检测元素a 是否在b中
np.save(文件名,数组) 将数组储存进磁盘
np.savez() 可以将多个数组保存到一个未压缩文件中
np.laod() 读取
np.savez_compressed() 如果要压缩
# numpy 帮助处理数值型数据 import random import numpy as np #使用numpy 生成数组 a = np.array([1,2,3]) print(type(a)) #<class 'numpy.ndarray'> b = np.array(range(10)) c = np.arange(4,10,2) #[4,10) 步长为2 print(c) print(c.dtype) # int64 numpy 对数组的固有类型 # numpy 中的数据类型 t4 = np.array(range(0,12),dtype='int8') # numpy 中的bool 类型 t5 = np.array([11,0,1,0,10,10,10,0,0,0,1],dtype=bool) # 修改数据类型 t6 = t5.astype('int64') #%% # numpy 中的小数 t7 = np.array([random.random() for i in range(10)]) print(t7) t8 = np.round(t7,2) # 保留小数值 print(t8) z = "%.2f"%random.random() print(z) #%%------------- #数组的形状 print(t4.shape) t2 = np.array([[1,2,3],[4,5,6]]) print(t2.shape) t3 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]]) # 3维 print(t3.shape) #修改数组的形状 print(t4) t14 = t4.reshape((3,4)) # 转变为三行四列 print(t14) #%% t5 = np.arange(24).reshape((2,3,4)) # 两块,每块三行,每行4列 print(t5) #降维 t6 = t5.reshape((24,1)) #(24,)和(24,1)是不一样的 print(t6) t6= t5.flatten() print(t6) #转换成1维 #%% #数组的计算 t5=t5.reshape(4,6) print(t5*2) t6=np.arange(100,124).reshape(4,6) print(t6) print(t5+t6) #对应位置进行计算 t7 = np.arange(0,6) print(t5-t7) # 没行都减t7 t8 = np.arange(0,4).reshape(4,1) print(t5-t8) #%% #轴 axis = 0 行 1 列 三维 :0 块 1行 2列 # numpy 读取数据 # np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False) # fname:文件,字符串或产生器,可以是.gz或bz2压缩文件 # delimier 分割字符串,默认为空格,改为逗号 # skiprows 跳过前X行 # usecols 读取指定的列,索引,元组类型 # unpack 表示转置 如果True 读入属性将分别写入不同数组变量, False, 读入数据值值写入一个数组变量,默认false
数组的拼接:
#%% 数组的拼接 #竖直拼接 np.vstack((t1,t2)) t1 = np.arange(12).reshape(2,6) t2 = np.arange(12,24).reshape(2,6) t3 = np.vstack((t1,t2)) #%% 水平分割 np.hstack((t1,t2)) t4 = np.hstack((t1,t2))
数组的行列交换:
#%% 数组的行列交换 t3[[1,2],:] = t3[[2,1],:] # 第二行与第三行换了下位置 t4[:,[0,2]] = t4[:,[2,0]] # 0-2 列倒了下位置
判断是否为nan
#%% 判断是否为nan print(np.isnan(t2))
创建正方形数组:
#%% 创造一个对角线为1 的正方形数组 t5 = np.eye(3) #获取最大值,最小值的位置 print(np.argmax(t5,axis = 0)) #[0 1 2] 第一个为0 ,第二个位1, 第三行的为2 print(np.argmin(t5,axis = 1))
创造一个全为0 或全为1 的数组
#%% np.zeros() 创造一个全0 的数组 zero_data = np.zeros((3,1)).astype(int) ones_data = np.ones((5,1)).astype(int)
将数组里的nan替换为平均值
def fill_ndarray(x1): # 函数不太懂, 没有赋值 怎么就理所当然的替代掉了 for i in range(x1.shape[1]): #i 为列的索引号 temp_col = x1[:,i] # 当前的一列 nan_num = np.count_nonzero(temp_col!=temp_col) if nan_num !=0: temp_not_nan_col = temp_col[temp_col == temp_col] # 选中当前为nan的位置,吧值赋值为不为nan的均值 temp_col[np.isnan(temp_col)]= temp_not_nan_col.mean() # 将为nan的数据用平均值替代带哦 return x1 if __name__ == '__main__': x1 = np.arange(12).reshape(3,4).astype('float') x1[1,2:] = np.nan # 第一行的第二列往后全为none print(x1) x1 = fill_ndarray(x1) print(x1)
numpy 切片
可以进行布尔索引
#%% t2 = np.arange(24).reshape(4,6) # 将t2进行转置 t3 = t2.transpose() t3 = t2.T t3 =t2.swapaxes(1,0) #%% #numpy 的索引与切片 # 取行 print(t2[2]) print(t2[2,3]) # 取的是第3列第4个 print(t2[[1,3]]) # 取不连续的多行 print(t2[1,:]) # 取第二行 print(t2[2:,:]) # 取第二行以后的所有行 print(t2[[1,3],:]) # 取第一行和第三行 #%% 取列 print(t2[:,2]) # 取了第三列 print(t2[:,[1,3]]) # 取index为1,3的列 #%% 取多行多列 # 第一行到第三行,第2列到第4列 print(t2[0:3,1:4]) # 取多个不相邻的点 print(t2[[2,3],[1,5]]) # 选取出来的结果是 (0,0),(2,1) ,(2,3) print(t2[[0,2,2],[0,1,3]]) # numpy 的数值修改, 只需要用切片重新赋值即可 t2[t2<10] = 3 # numpy 的三元运算 np.where(t<10,10) t3 = np.where(t2<=3,100,300) # numpy 的裁剪 clip (比如吧小于10 的替换成10 大于10 的替换成18) t4=t2.clip(10,18) # nan是浮点类型 t2= t2.astype(float) t2[3,3] = np.nan
Numpy 常用统计函数
求和: t.sum(axis = None)
均值: t.mean(a,axis = None) 受离群点的影响较大
中值:np.median(t,axis = None)
最大值:t.max(axis = None)
最小值:t.min(axis = None)
极值: np.ptp(t, axis = None) 即最大值和最小值之差
标准差: t.std(axis = None)
浙公网安备 33010602011771号