科学计算库numpy的基础知识总结——学习笔记

    科技2022-07-15  113

    本章总结了关于Nuumpy模块的基本用法和常用函数

    有详细的注释

    import numpy as np import re import pandas as pd ####数组的基本操作#### arr1 = np.array([1,2,3,4])# 创建一个数组 print(type(arr1)) # 查看数据格式 arr1.shape # 查看数组结构 # 将列表转换为数组 a_list = [1,2,3,4,5] a_arr2 = np.array(a_list) print(type(a_list)) print('**'*30) print(a_arr2.dtype) # 数据类型 print(a_arr2.size) # 查看元素个数 print(a_arr2.ndim) # 查看维度 ####索引与切片#### # 数组索引 print(a_arr2[1:3]) # 注意是左闭右开,取不到索引为3的元素 print(a_arr2[-2:]) # 负数表示从倒数第2位开始取到最后。 a_arr3 = np.array([[1,2,3],[2,3,10],[1,34,4]]) print(a_arr3) print(a_arr3[1,2]) # 取第2行,第3列 的元素 10 a_arr3[1,2] = 100 # 将该位置的10元素,重新赋值为100 print(a_arr3) print(a_arr3[1:]) # 取第2行的全部数据 print(a_arr3[:,1]) # 取第2列的全部数据 # bool索引 a_arr4 = np.arange(0,100,10) # 创建数组与 range函数差不多 print(a_arr4) a_arr5 = np.array([0,1,1,0,0,0,0,0,1,2],dtype=bool) # 创建布尔类型的数组。注意最后一个数2,只要非0,就返回真 print(a_arr5) print(a_arr4[a_arr5]) # 根据布尔索引类型返回数据 random_arr = np.random.rand(10) # 创建随机数组 mask = random_arr > 0.5 # 指定条件 print(mask) print(random_arr[mask]) # bool索引取值 # 数组对比判断 x = np.array([1,1,1,1,4]) y = np.array([1,1,1,1,5]) print(x == y) print(np.logical_and(x,y)) print(np.logical_not(x,y)) print(np.logical_or(x,y)) # 数值运算 print(np.sum(x)) a_arr3 = np.array([[1,2,3],[2,3,10],[1,34,4]]) print(a_arr3) print(np.sum(a_arr3,axis=0)) # 行求和,是竖着的哦!!!!axis = 1列求和,是水平的哦 # 数值运算扩展 print(a_arr3.prod()) # 累乘 print(a_arr3.min(axis=1)) # 求水平的最小值 # 类似的还有mean,std,var,clip,round # 特别注意是clip print(a_arr3.clip(2,4)) """ 解读:比2小的全部变为2,比4大的全部变为4,中间部分不变 """ # 四舍五入 a_arr6 = np.array([1.011,2.3145,1.122,4.3122,8.7825],dtype=np.float32) print(a_arr6.round(decimals=2)) # 如果位数不够,不执行操作 # 寻找最大值最小值位置 print(a_arr6.argmax()) # 对应的有min() # 排序 print(np.sort(a_arr6)) print(np.argsort(a_arr6)) # 返回排序后原先的位置索引 a_arr7 = np.linspace(0,10,10) # 在0-10之间产生等间隔产生10个数。 values = np.array([2.12,12,1]) print(np.searchsorted(a_arr7,values)) ####数组形状的操作########## a_arr8 = np.arange(10) print(a_arr8) print(a_arr8.shape) a_arr8.shape = 2,5 print(a_arr8) # 新增数据维度 a_arr9 = np.arange(10) a_arr9 = a_arr9[np.newaxis,:] print(a_arr9.shape) # 数组压缩 print(a_arr9.squeeze()) print(a_arr9.flatten()) # 数组转置transpose print(a_arr9.transpose()) # 也可以a_arr9.T # 注意实际并没有对原数组进行处理 ####数组的拼接############## a = np.arange(10).reshape((2,5)) b = np.arange(20,30,1).reshape((2,5)) print(np.concatenate((a,b),axis=1)) # 默认是竖直拼接 print('//'*30) print(np.stack((a,b))) # 拼接会增加一个维度 print(np.vstack((a,b))) # 竖直 axis = 0 print(np.hstack((a,b))) # 水平 axis = 1 ## 创建数组 print(np.arange(1,10,1,dtype = np.float32).reshape((3,3))) print(np.logspace(0,1,5)) # 默认是10为底 # 快速创建行列向量 print(np.r_[0:5:1]) print(np.c_[0:5:1]) # 创建0矩阵 print(np.zeros((3,3),dtype=np.int32)) # 创建单位矩阵或者任意矩阵后面乘以数值即可 print(np.ones((3,3))) # 创建空矩阵 a = np.empty((3,3)) a.fill(22) # 用22填充 print(a) # 生成一个类似的数组 print(np.zeros_like(a)) # 生成一个对角矩阵 print(np.identity(5)) # np.diag() # 参见diag用法。 print(help(np.diag)) # 查看用法 # 随机模块 print(np.random.rand(3,2)) print(np.random.randint(10,size=(5,4))) print(np.random.randint(0,10,3)) print(np.random.rand()) # 随机产生高斯分布(正态) print(np.random.normal(0,1,10)) # 均值为0,方差为1,的10个数 # 全局指定小数精度 np.set_printoptions(precision=2) print(np.random.normal(0,1,10)) # 数据清洗-洗牌 a_arr10 = np.arange(10) print(a_arr10) np.random.shuffle(a_arr10) print(a_arr10) # 种子 np.random.seed(0) a = np.random.normal(0,1,12).reshape((3,4)) print(a) # 文件读写 def text_save(filename, data):#filename为写入CSV文件的路径,data为要写入数据列表. file = open(filename,'a') for i in range(len(data)): s = str(data[i]).replace('[','').replace(']','')#去除[],这两行按数据不同,可以选择 s = s.replace("'",'').replace(',','') +'\n' #去除单引号,逗号,每行末尾追加换行符 file.write(s) file.close() print("保存文件成功") text_save('Ceshi.txt',a) # 读取 data = [] with open('Ceshi.txt') as f : for line in f.readlines(): fileds = line.split() cur_data = [float(x) for x in fileds] data.append(cur_data) data = np.array(data,dtype=np.float32) print(data) data = np.loadtxt('Ceshi.txt') print('-'*30) print(data)
    Processed: 0.009, SQL: 8