- 博客(46)
- 收藏
- 关注
原创 E - Remove Pairs (Atcoder Beginner Contest 354)
两个人T和A,轮流执行操作,如果轮到的那个人无法进行操作,则输掉比赛。T先手,如果T能赢得比赛,则输出Takahashi,否则输出Aoki。N个卡片,每个卡片正面有数组A,反面有数字B,如果两个卡片的正面数字相同或者反面数字相同,那么这两个卡片可以在一次操作中消去。假设当前状态为X,假设X可以转移到Y,其中dp[x]表示执行操作时,状态为X是否可以取胜。数据范围: 1<=N<=18, 1<=A,B<=1e9。N最大是18,使用一个数字来表示当前牌的局面。
2024-05-31 10:13:07 157
原创 背包问题(01背包、完全背包、多重背包)
优化空间复杂度 假设考虑到第i件物品的容量为j时的状态,即dp[j],这里的dp[ j ]保存的值是前i-1件物品的最大价值。,所以遍历的时候,体积正序遍历就可以了。如果选择的话,dp[i][j]=dp[i-1][j-w[i]]+v[i]多重背包也是以01背包为基础的背包问题,最朴素的做法就是枚举该物品的个数,和完全背包的朴素枚举基本上是完全一样的,只需要加一个物品个数限制就可以了。问题描述有n件物品,每件物品有一定的价值,获取每件物品都需要一定的代价,在遵守一定的规则的情况下,获取最高的价值。
2024-05-31 09:30:18 384
原创 Atcoder C - Routing
思路:该问题可以归约为最短路问题,问题中的条件1和条件2是相互独立的,可以分开考虑,从地图中的一个点,沿上下左右四个方向走,所花费的代价为:如果两个格子颜色相同,代价为0,如果两个格子颜色不同,代价为0,代价可以理解为边的权重,那么问题就转换为了单源最短路径问题。可以使用SPFA算法求解。
2024-05-13 22:52:20 264
原创 MLagents 多场景并行训练
关于的环境安装已经有了很多的blog和Video,本文针对的多场景的并行训练,以及在探索过程中出现的问题进行总结。
2023-07-27 22:28:07 539
原创 opencv项目实践三(文档矫正)
原始文档矫正后文档思路:只要获得倾斜文档的倾斜角度,然后通过仿射变化旋转一下就可以实现矫正了,这里获取倾斜角度的方法有两个,下面分别介绍1、利用霍夫变换,文档内容都是平行的,首先利用利用霍夫变换检测直线,然后将所有直线的平均倾斜角度当做文档的倾斜角度,最后再进行仿射变换就可以了。import cv2import numpy as npdef imshow(img): cv2.imshow("img",img) cv2.waitKey(0) cv2.destroyAll
2022-03-04 23:00:39 4389
原创 opencv项目实践二(银行卡卡号识别)
任务说明 给一张银行卡,识别银行卡上的卡号信息。输入一张图片,将4000 1234 5678 9010输出即可。实现一、思路定位银行卡上卡号所在区域,单独提取出来。定位卡号区域中的每个卡号数字,将每个卡号数字所在区域单独提取出来。通过模板匹配识别每个卡号数字。二具体代码实现1、因为要用到模板匹配,首先加载每个模板卡号模板# 读取模板图片img_m = cv2.imread("ocr_a_reference.png",1)img_m_g = cv2.cvtColor(img
2022-03-01 16:45:53 6311
原创 Anaconda的一些操作
1、关于虚拟环境比如创建一个名字为dppy37、python版本为3.7的一个虚拟环境conda create -n dppy37 python==3.7激活环境conda activate dppy37删除这个环境conda remove dppy37查看当前有多少个环境conda env list2、在pycharm中使用conda的虚拟环境选择Existing interpreter在interpreter中找到刚刚在虚拟环境中创建好的解释器应该是在 …Anaconda3
2021-12-06 13:01:47 151
原创 阿里源镜像安装Pytorch(cpu)
截止到2021 / 11 / 4,源链接可用pip install torch torchvision -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
2021-11-04 11:02:44 2359
原创 爬取豆瓣top250电影
爬取思路:1、使用selenium来获取页面源码,实现翻页功能。2、获取页面源码后可以获取每个电影对应页面的url。3、然后请求电影页面的url信息,将需要的保存起来即可。code:import requestsfrom selenium import webdriver from bs4 import BeautifulSoupimport osimport time class Spide_douban(): def __init__(self): self
2021-10-30 20:23:39 420
原创 爬虫基础(案例:站长之家图片)
爬取思路:1、首先找到图片分类信息,然后获取每个分类的url2、请求每个分类的url可以得到相应页面的HTML源码3、得到源码后使用BS4对信息所在的标签进行定位。4、得到图片URL后保存一下就可以了code:import requestsfrom bs4 import BeautifulSoupimport jsonclass zhanzhang(): def __init__(self): self.url = "https://sc.chinaz.com/t
2021-10-30 18:04:40 399
原创 爬虫基础(案例:京东商品爬取,附selenium使用)
selenium(WEB自动化工具)需要下载chromedriver,版本与chrom版本要对应。from selenium import webdriverimport timedriver = webdriver.Chrome(executable_path = path)# 防止快速关闭浏览器time.sleep(2)url = "www.baidu.com"driver.get(url)#可直接访问url#浏览器定位,chrom调试 定位到目标内容,copy selector然后
2021-10-30 17:41:38 715
原创 爬虫基础(案例:爬取链家网,附:BeautifulSoup中常用的一些操作)
soup.find("ul")返回首个标签为ul的标签内容。类型为soup,仍然可以使用soup类函数对返回内容进行处理。soup.find("ul",attrs = {"class":"ul2"}) 返回标签为ul,且属性class = ul2的标签内容。即添加attrs进行过滤,返回满足要求的首个标签。print(soup.findAll("ul",attrs = {"class":"content"}))soup.findAll 默认返回所有内容,类型是list,list中的每个元素都是
2021-10-30 17:16:10 631
原创 爬虫基础(案例:北京新发地信息爬取)
爬取思路:1、找到蔬菜信息页面,然后进行翻页,发现页面的url没有发生改变,所有蔬菜信息是通过接口数据动态获取的,是动态数据。2、进行chrom调试抓包,找到每个页面信息所在的url3、 发现每个信息的url都相同,post请求,form data不同。4、通过修改提交的data来获取不同页面的蔬菜信息。import requestsimport jsonimport csvfile = open("C://Users//孤桥//Desktop//项目//PekingXFD//vegeta
2021-10-30 16:54:43 2233 1
原创 爬虫基础(案例:爬取英雄联盟全皮肤)
爬取思路:1、首先分析是静态数据还是动态数据,HTML源码中找不到英雄页面的信息,所以是静态数据。2、chrom调试抓包,找到皮肤信息所在的URL ,这里第一个英雄皮肤所在的URL为https://game.gtimg.cn/images/lol/act/img/js/hero/1.js3、直接通过get请求来获取包含目的信息的json数据4、从json数据中提取各个皮肤的url以及名称并保存下来。5、到此为止,单个英雄的皮肤爬取成功。6、分析发现不同英雄页面的url之间只是最后的编号不同,再次
2021-10-30 16:44:39 1404 1
原创 爬虫基础(案例:爬取17K小说个人书架信息)
爬取思路:1、进入17K官网,(先不要登录),然后点击书架,这时会弹出登录页面。2、进行抓包,然后输入登录的账号密码(请勿使用第三方登录)3、登录成功后,找到名称为login的包,这样就得到了登录的URL,Form data为请求时需要提交的信息。4、使用post请求该URL,提交的信息data为Form data中的信息。5、登录成功后,可以获得该URL的cookie信息,找到其中的accessToken6、找到书架书籍所在的链接,使用get请求,请求头中要带有刚刚获取的accessToken
2021-10-30 16:32:43 1544 8
原创 爬虫基础(基础知识)
1、爬虫介绍爬虫是一种按照一定规则,自动地抓取万维网信息的程序或者脚本。通用网络爬虫又称为全网网络爬虫,爬取对象是从一些种子URL扩展到整个WEB,各种搜索引擎是一个典型的例子。聚焦(主题)网络爬虫指有目的性的进行爬虫,根据需求按需采集。深度网络爬虫:有些信息需要提交参数才可以获取隐藏数据。增量式网络爬虫:对曾经爬取过的网站但是又更新的网站进行爬取,可以在一定程度上保证爬取的页面是尽可能新的页面爬取得到的数据的分类有:用户产生的数据:如WeChat、QQ等;政府的数据:中国政府数据网;数据公司管
2021-10-30 16:10:02 683
原创 Python基础知识(实训周)
1、字符串操作str1 = "asdasdasdasdasdasdasd"print(str1[::]) 与str1[:]等价# str1[开始下标:结束下标(不包含)],开始下标默认为0,结束下标默认为最后个位置+1print(str1[::3]) #3是步长print(str1[::-1])#逆序输出print(x)多维数组的切片操作p是一个多维度数组,p.shape = (3,4,5,6)p[a0:b0:c0,a1:b1:c1,a2:b2:c2,a3:b3:c3]a0:b0:c0表
2021-10-30 12:26:39 343
原创 OpenCV常用函数
1、imread用于读入图像x = cv2.imread(path,flag)path:图像路径flag: cv2.IMREAD_COLOR:读入彩色图像(可以直接写1) cv2.IMREAD_GRAYSCALE:读入灰度图像(可以直接写0) cv2.IMREAD_COLOR:和alpha通道有关...(可以直接写-1)读入的图像格式:(height,weight,channel)2、resize更改图像的shapeout = cv2.resize(InputArray src[, O
2021-10-12 16:42:36 1167
原创 给图像添加噪声(椒盐噪声,高斯噪声)
1、椒盐噪声是比较常见的噪声(salt and pepper noise),为什么叫椒盐噪声?因为图像的像素点由于噪声影响随机变成了黑点(dark spot)或白点(white spot)。这里的“椒”不是我们常见的红辣椒或青辣椒,而是外国的“胡椒”(香料的一种)。我们知道,胡椒是黑色的,盐是白色的,所以才取了这么个形象的名字。接下来我们来实现一下椒盐噪声首先看一下原始图片椒盐噪声有两种(slat or pepper)也就是黑点和白点,实现起来是类似的,这里值对slat进行说明import cv2
2021-10-12 16:42:17 10053
原创 Pytorch构造神经网络的几种等价方式
几种构造方式比较常用的两种方式1、通过集成nn.Module()来定义一个神经网络以LeNet为例# LeNet:卷积+池化+卷积+池化+全连接+全连接+全连接(两层卷积+三层全连接,一共5层)class Net(nn.Module): def __init__(self): super().__init__() self.Cv = nn.Sequential( nn.Conv2d(1,6,kernel_size= 5),
2021-10-10 19:26:04 204
原创 批量归一化(BN)
1、为什么需要批量归一化?在训练过程中,每层输入的分布不断的变化,这使得下一层需要不断的去适应新的数据分布,在深度神经网络中,这让训练变得非常复杂而且缓慢。对于这样,往往需要设置更小的学习率、更严格的参数初始化。通过使用批量归一化(Batch Normalization, BN),在模型的训练过程中利用小批量的均值和方差调整神经网络中间的输出,从而使得各层之间的输出都符合均值、方差相同高斯分布,这样的话会使得数据更加稳定,无论隐藏层的参数如何变化,可以确定的是前一层网络输出数据的均值、方差是已知的、固定的
2021-10-08 20:10:04 361
原创 Python enumerate,iter的用法
1、enumerate将一个可遍历的对象增加下标,组合成一个新的序列enumerate(sequence , [start = 0])例如:seasons = ['Spring', 'Summer', 'Fall', 'Winter']for i,j in enumerate(seasons,start = 1): print(i,j)输出:1 Spring2 Summer3 Fall4 Winter就是给一个可遍历的序列的每一项增加一个下标,然后构成一个元组,再组成一个新序列
2021-10-06 20:57:37 889
原创 Pytorch实现线性回归
从0开始1、导入需要的函数库import torchimport numpy as npimport randomfrom matplotlib import pyplot as pltimport osos.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"#解决jupyter运行时挂掉的问题。2、生成数据#生成数据 y = w*x+b+c 其中 b是偏置值,c是噪声。 num_input = 2num_example = 1000w = np.arr
2021-10-04 09:36:50 129
原创 Pytroch中常用函数
1、torch.empty()torch.empty(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) → Tensor返回一个size大小的tensor,里面的数值是随机的,主要用到size,其它都是可选内容。szie可以是列表,元组等。2、torch.rand()torch.rand(*size,out=None)返回一个大小为size
2021-10-02 21:00:33 1665
原创 顺序表--动态内存分配
1、空指针(NULL)。不给指针分配物理内存空间。2、野指针:区别于空指针,只是简单的定义的指针的类型,并没有给指针分配属于他自己的内存空间,此时的指针随机指向内存中的一段空间。3、当我们给野指针分配内存后,或者让他指向某一段静态的内存,这时的指针有了自己的内存,不在是野指针。动态分配内存在C语言中,我们常常通过malloc函数为一个野指针分配内存。 int *p;//没有为指针分配内存,此时的指针我们称之为野指针。 p = (int *)malloc(sizeof(int )*Max_siz
2021-05-28 23:32:29 871
原创 归并排序,基数排序
归并排序基本思想:按照二叉树的形式切割数组,直到每个数组中只有单个元素,这样数组就有序了,然后将切割的两个有序的左右数组合并为一个有序的大数组,两两归并,分治法的典型应用。code:void merge(int left,int right,int mid){ for(int i=left;i<=right;i++) tmp[i] = arr[i]; int l = left; int r = mid+1; for(int i = left;i<=right;i++){ if(
2021-05-20 20:13:46 56
原创 选择排序(简单选择排序,堆排序)
简单选择排序基本思想:每一趟(第i趟)都选择数组后(n-i+1)个待排元素中最小的那个,放到位置i上。一共执行n-1趟。code:void s_sort(int q[]){ int minn; for(int i=1;i<=n;i++){ minn = i; for(int j=i+1;j<=n;j++){ if(q[minn]>q[j]) minn = j; } if(minn != i) swap(q[minn],q[i]); }}算法分析:
2021-05-19 21:32:02 52
原创 交换排序(冒泡,快排)
冒泡排序 基本思想:每趟排序考虑相邻的两个数,如果顺序则考虑下两个数,如果逆序就swap一下,这样每一趟排序都可以让最“重”的数下降到边缘,n个数需要进行n-1次排序。(写法有好多种)void bubble_sort(int n){ for(int i=1;i<=n-1;i++){ bool flag = 0; for(int j=1;j<=n-i;j++){ if(arr[j]>arr[j+1]){ flag = 1; swap(arr[j],
2021-05-19 19:39:16 61
原创 插入排序(直接插入,折半插入,希尔)
直接插入排序 基本思想:假设有n个元素,当前考虑到第i个元素,前i-1个元素已经排好顺序,将第i个元素插入到前i-1个合适的位置。 步骤:1、设置一个“哨兵”把第i个元素放到"哨兵"上,比较的时候直接拿"哨兵"比较即可。2、从i-1往前查找合适的位置,并把比当前大的元素往后挪。void insert_sort(int n){ int j; for(int i=2;i<=n;i++){ if(arr[i]<arr[i-1]){//如果arr[i]>=arr[i-1]的话
2021-05-15 21:34:28 136
原创 深度学习---关于OpenCv的部分函数操作
1、读入img = cv2.imread(‘a.jpg’)以BGR的格式读入图像,matoplib是以RGB的方式读入的2、图像的显示#设置可以更改窗口的大小cv2.namedWindow(‘present img’,cv2.WINDOW_NORMAL)#以BGR的方式显示图像cv2.imshow(‘present img’,img)#让图像窗口停留cv2.waitKey()#清理掉内存中无用的缓存的图片cv2.destroyAllWindows()3、图像灰度化处理g
2021-04-08 15:03:25 172
原创 基于卷积神经网络的手写数字识别
import torchfrom torchvision import transformsfrom torchvision.datasets import mnistfrom torch.utils.data import DataLoaderimport torch.nn as nnimport torch.optim as optimepoch_num = 10lr = 0.1momentum = 0.5transform = transforms.Compose([transfor
2021-03-31 22:40:09 154
原创 实验一 :利用卷积神经网络识别CIFAR10图片
import torchimport torchvision# 预处理和加载数据集from torchvision import datasets,transforms# 分批加载打包数据from torch.utils.data import DataLoader# 神经网络模型import torch.nn as nn# 激活函数import torch.nn.functional as F# 加载优化器import torch.optim as optim# 可视化impor
2021-03-29 16:07:58 850
原创 深度学习-----手写数字图片的识别训练
上课讲过的代码,记录一下~~#1导入需要的各类包import numpy as npimport torch# 导入 pytorch 内置的 mnist 数据from torchvision.datasets import mnist #导入预处理模块import torchvision.transforms as transformsfrom torchvision import transforms,datasetsfrom torch.utils.data import DataLo
2021-03-22 21:44:50 342 2
原创 深度学习中Matplotlib和Pandas常用函数
import matplotlib.pyplot as pltimport pandas as pd 1、 Matplotlib.pyplot1、plt.plot(x,y,lw=a,c=‘r’),其中x是一个列表/数组/元组…,y是x通过某种映射得到的。绘出y关于x的图像,lw指的是线宽,c指的是线的颜色。plt.xlabel(‘x-value’) ,plt.ylabel(‘y-valiue’) 对图像进行行列标注。2、对图像添加标签:plt.plot(x,y,label=‘sin fig’)
2021-03-05 20:48:59 389
原创 Numpy常用函数总结
1、array=np.array(list/tuple) 将列表元组等强制转换为数组array=np.array(list/tuple,dtype=float64/int) 强制转换为数据类型为dtype的数组2、array.shape 返回一个元组,各元素表示array数组的各维度的大小。3、np.linspace(a,b,c) 构造初始值是a,结束值是b,一共有20个元素的数组。4、np.arrange(a,b,c) 构造一个初始值是a,结束值是b,步长是c的数组。5、np.zeros((x,
2021-03-04 16:20:13 468 1
原创 (Leetcode)354. 俄罗斯套娃信封问题(二维LIS)
LIS问题。首先对根据w对二维数组进行排序,然后求h的LIS,在这里排序有值得注意的地方,题目要求w1和h1必须严格大于w0和h0才能将其套住。所以如果说w1<w0,显然物品1在物品0的前边,如果w1=w0,那么我们考虑h,如果h1>h0的话,让h1在前边。举个例子:[w0,h0],[w1,h1]。假设W0=W1,如果h0<h1的话,那么LIS=2,这显然是错误的,所以我们让物品1在前边,LIS=1;code:class Solution {public: int d
2021-03-04 16:09:17 180 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人