- 博客(64)
- 收藏
- 关注
原创 client网络模块的开发和client与server端的部分联动调试
client端的deal函数,我们需要处理server端发来的很多包,但是我们又要防止内存泄漏,我们也不知道server端一次性给client端发了多少包,就不知道在这个函数哪个地方释放掉这个内存,但是我们知道的是client端的socket释放时候,我们那个包肯定处理完了,所以我们搞一个成员变量,让其在析构时候自动delete掉,我们想到了vecter,随对象的释放而析构。因为client对server是短连接,所以server端的deal函数只用处理一个包,可以随着过程释放new出来的空间。
2024-08-22 11:58:24
1158
原创 anaconda的基础用法
Conda创建环境相当于创建一个虚拟的空间将这些包都装在这个位置,我不需要了可以直接打包放入垃圾箱,同时也可以针对不同程序的运行环境选择不同的conda虚拟环境进行运行。这样就在这个房间里面买了一个’工具‘也就是所谓python包,我们的程序可以在这个房间里面运行。环境 = “好比一栋楼,在楼里面分配一间屋给各种‘包’放,每间房里面的‘包’互不影响”激活环境 = “告诉电脑,我现在要用这个屋子里面的‘包’来做东西了所以要进这间屋子”这是我已经安装的包,在这里面有的包我都可以当工具来使用。
2024-06-18 17:08:43
357
原创 SVM-SMO算法
输入是m个样本x1y1x2y2xmymx1y1x2y2...xmym其中x为n维特征向量。y为二元输出,值为1,或者-1.精度e。输出是近似解α1)取初值α00k0α00k02)按照选第一个变量的方法选择α1k\alpha_1^kα1k,接着按照选第二个变量的方法选择α2k\alpha_2^kα2k,求出新的α2newuncα2newuncα。
2024-06-16 20:31:22
1107
原创 SVM支持向量机
打个比方,要把刀哥和吴彦祖分开,豆子代表人们,加上几个特征(维度)1.20-40岁 2.女性 就可以大致将人们分的差不多了,可以继续加特征(维度)来使其更加分离。尽量小,误分类的点尽可能的少。都可以作为最终的结果, 但是我们一般采用一种更健壮的办法,即求出所有支持向量所对应的。我们可以先求优化函数对于w,b的极小值, 接着再求拉格朗日乘子α和 μ的极大值。都是一样的,这里我们仍然这么写是为了和后面加入软间隔后的SVM的算法描述一致。是函数间隔,是可变的间隔,所以我们通过变换将要求的几何间隔变为求函数间隔。
2024-06-15 22:24:07
712
原创 KKT基础知识
KKT条件(Karush–Kuhn–Tucker conditions)是最优化(特别是非线性规划)领域最重要的成果之一,是判断某点是极值点的必要条件。
2024-06-15 22:16:47
1933
原创 决策树的概念和构建
构建的二叉树尽量均衡就像一个班60个人的实力都差不多,现在要选一个人去拯救世界,就确定不了,但是一个班有一个人能力特别特出,选这个人去拯救世界的概率就比较大,就比前面的情况更有确定性最大的那个值就算均匀分布时候的那个值
2024-06-05 00:37:00
637
原创 创建自己的sdk
下面操作只能保证项目知道去哪里找了,但是不知道具体找哪个(这就需要个人设置)右键class出来这个界面,在里面勾选静态库(.lib)头文件如下,namespace可以写在头文件里面声明。代码如下,我们要将其封装为一个sdk供别人安装使用。截下来演示怎么导入到另一个项目中。将那两个文件移到那个文件夹中。我们拿到生成的这两个文件了。要把造轮子当作一种享受。
2024-06-05 00:04:13
266
原创 头文件和源文件的一些情况分析
函数和变量的声明可以有多次,但是定义只能有一次其实头文件可以写函数的定义,但是在工程里面很多人引用这个头文件很容易造成重复定义的情况//2.h//1.cppreturn 0;重复定义了```这中间写想只被编译一次的内容这个方法也可以控制软件的版本。
2024-06-04 23:47:40
378
原创 定时器和定时器的两个小项目
/头文件 # include <INTRINS.H>if(T0Count>=500)//分频500次,500msT0Count=0;if(LEDMode==0) //模式判断//LED输出,循环左移//循环右移(和普通右移不一样)
2024-05-30 23:42:11
195
原创 朴素贝叶斯
那个不太懂的点其实是Dodo讲错了,那里还是累乘的符号,然后64种情况累乘起来就是P(X=x),这是固定的,假设为C。P(Y=CK)这是按照训练集0~9的个数来计算的,注意维度的区别,有些是像素维度,有些是图片维度。注意之前我们讲的数据集是8*8的矩阵,然后我们处理矩阵的方式就是讲矩阵排列成一行。我们假设这个像素点的出现是相互独立的(在现实中并不是相互独立的)如果训练集中没有0,那么P(Y=CK)=0,就不能当分母了。注意P(B)=1, 已经知道路人抽中的就是绿豆。在X的条件下分别等于0~9的概率。
2024-05-26 23:41:11
449
原创 k近邻和kd树
前提是已经有了一棵kd树,然后来一个实例点。采用树这个特殊的数据结构来实现k近邻算法。选取k值的时候可以采用交叉验证的方法。找这个中位数是按照每棵子树来创建的。下面讲解kd树的完整构造过程。
2024-05-24 16:18:25
340
原创 LCD1602和矩阵键盘
为什么采用LCD1602不采用数码管来输出调试信息?因为数码管是程序扫描模式,太占用cpu资源了,LCD1602更像管道方式(本质还是处理中断的方式问题)
2024-05-20 22:44:39
274
原创 感知机代码
这段代码主要是判断给的图片是不是0-9之间的数据,不可细分0-9。相当于是28*28=784维度的空间,然后训练w。tqdm可以显示进度条。
2024-05-14 22:31:32
152
原创 函数模板底层本质
数组(详情请看那一篇文章)大小不一样也重新生成函数。就算非类型参数值不一样编译器也重新生成函数。模板本质是编译器帮忙生成了不同的函数。
2024-05-13 00:41:42
158
原创 win10建立共享文件夹和ipad共享文件
然后回出现一个要输入用户名和密码的界面,输入自己电脑开机的用户名和密码。把Everyone的权限改为读取/写入。打开文件夹的属性,点到共享的地方。再回到之前哪个地方,点击共享。在任意地方新建一个文件夹。查看自己的局域网IP。最后点击共享就欧克了。
2024-05-12 12:11:46
479
原创 auto->decltype
a++等价于a,a++是要当a被用过(这里面要被decltype用过)才++,所以先decltype,所以直接为int类型。++a(等价于a = a+1,这个表达的值就是a+1)相当于经历了运算,又有&a这个固定地址,所以为int&引用类型。是没有固定地址的,是暂存在寄存器中的,所有这个类型直接为int(就算为int& + int&)声明变量别用auto,auto是让编辑器来自己推断,很影响运行效率。c++11标准才有的,c++14丰富了很多这个相关的用法。因为(a+b)/2没有固定地址所以是int类型。
2024-05-12 00:06:41
409
原创 传参右值引用的好处
左值有明确的内存空间,右值无明确的内存空间,230+300是没有正式的地址的,一般是临时找一个寄存器暂存,不放栈中。本质就是说右值引用可以不用占用宝贵的栈空间,而是自己找一些犄角旮旯存(一些寄存器)有时候需要临时变量来测试,这种返回结构体的行为太浪费栈空间了。和常量左值引用不同的是,右值引用还可以对右值进行修改。这是将230+300的值临时放在eax寄存器中。目前这个地方还是一知半解,需要深入学习汇编知识。右值不代表在右边,左值不代表在左边。于是可以采用右值引用来节省栈空间。
2024-05-09 00:09:35
192
原创 感知机导论
感知机也可以多分类,把多个感知机模型结合起来方便统一形式,规定一下后面的格式规定这种格式主要目的是为了简洁推导和方便coding最后一个式子是我们想办法要推导的k≤Rγ2k≤γR2∣∣wopt∣∣1∣∣wopt∣∣1表示这是几何距离,这是单位法向量.统一了单位存在γ0yiwopt∗xibopt≥γ\gamma>0,\;
2024-05-08 11:40:04
402
原创 c++函数返回指针和引用
写不了,我们把指针指向了这个常量区,看似拥有了,其实不属于str我们需要把常量字符拿出来,让指针指向栈区或者堆区结果依然出错,因为strRt这个字符数组为局部变量传不出来解决办法2-将char数组定义为全局变量现成的字符串复制函数strcpy但是strcpy是不安全的编译器会报warnning两种方法可以解除法一:法二:没得任何警告如果str1用new来创建时,就会报错这是因为strcpy_s()函数是有两个版本,用两个参数、三个参数都可以,只要可以保证缓冲区大小。三个参数时:两个参数
2024-05-07 00:36:12
309
原创 数码管的显示
74HC245的作用是稳定输入输出,数据缓冲作用,DIR表示方向默认给了正电压,就是左边流向右边,后面是电阻,COM表示线路公共。数码管有两种一种的负电压促发,一种是正电压促发,上图是单数码管的引脚。有较强重影,主要是因为选模块和选数码管的代码不同步,然后数据就会串。咱们这个单片机由8个单数码管,所以要用上38译码器,如下图。74138使能端,单片机上电直接就默认接通了。上图是数码管模组的引脚,采用了引脚复用技术。所以需要delay函数来延迟。
2024-05-06 23:06:46
276
原创 统计学习方法-导论
就像一个小学生不做作业,然后被爸爸打了,然后小学生就知道做作业了,因为赌博还没有被爸爸打,所以小学生以为赌博是对的,就去赌博,然后又被爸爸打了,小学生才知道不能赌博无监督模型后面没有label(是否招女孩子喜欢)对于监督学习而言呢,从数学形式来讲,主要分两种,我们首先看一下训练集呢,我一般是这样表述的,这个T就代表训练集去圈你。training data, x1就表示这条样本,y就表示是否招女孩子喜欢,比如说这个x(x(1),x(2)…)就是我们之前的体重,身高,年龄对于每一个x呢,它其实是有很多维度的,它
2024-05-06 00:55:10
643
1
原创 LED跑马灯
自己可以封装成一个函数可以延时任意毫秒,先给出1ms的函数,任何给一个形参代表循环的次数。注意这个地方的系统频率,江科大讲的是12MHz,然后调整那个指令集为T1。需要到stcisp工具里面调出延时函数。自己一开始以为,是sleep()函数。每一个端口对于cpu而言都是有编址的。P2_0这些可以操作单个端口。
2024-05-05 21:16:27
253
原创 点亮一个LED
两个地方要勾选,一个是单片机型号,一个是串口号,我的单片机型号不是江科大视频里面那个型号,所以不能按视频里面来选,串口号选CH340所在的地方。可以用16进制来表示灯的开灭状态,因为LED左边接的是正极,右边接的是负极才会亮,所以0就亮。P2端口有P20,21,22,23,24,25,26,27。在编译之前要勾选一个东西,不然scp读取不了。然后把51单片机冷启动一次就可以了。471表示47后面带一个0。
2024-05-05 11:43:30
452
原创 函数的引用参数
但是Acter和BeAct是局部变量,我可以通过Acter和BeAct指针改变Acter和BeAct结构体里面的具体字段值,但是不能让user指向prole,prole指向user,二级指针可以办到,但是太繁琐了,可以采用指针的引用。直接报错,运行都运行不了,因为引用的本质是指针,不能把int类型的指针指向float一样的道理。形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。
2024-05-04 15:49:15
337
原创 结构体反汇编解析
原因:只有在定义这个结构体变量时候,编译器就去看这个结构体的定义,然后结构体都是基础数据类型组成的,占用内存的大小都是确定的,所以可以通过偏移来访问结构体的成员。如果是地址就是采用箭头,箭头是偏移的意思,就像x86内核要取出寄存器的信息,定义一个结构体,然后用偏移来访问各个寄存器的值。可能是现在vscode编辑器的优化,把一些压栈的操作给忽略了,所以更加直白一些。,这是将在堆中创建了两个int变量,然后puser指向第一个int变量。发现在定义结构体的部分是没有汇编代码的。实体取出值就是按点(.)来访问。
2024-04-30 23:14:46
174
原创 anaconda的安装和Jupyter Notebook修改默认路径
c.NotebookApp.notebook_dir = //这个不是搜索出来的,是要自己加上去的一条。然后不能在开始菜单中通过快捷方式打开,这个打开那个路径不生效,自己也不知道什么原因。要是没有配置这个环境变量,后面就不能cmd启动Jupyter Notebook。按照那个标志打开,那个文件的属性是没有网上说的那个属性的。我们要找到Jupyter Notebook的配置文件。很多文章都比较老旧了,这个问题一个是新版本才有的。就可以找到存放配置文件的路径了。只能通过管理员模式的cmd打开。
2024-04-30 19:43:04
732
2
原创 const栈常量反汇编解析
查阅了钱林松老师的第62面,解释了#define和const的区别,const修饰的栈常量是伪常量,最终是一个变量,只是在编译期间对语法进行了检查,发现有对const变量存在直接修改行为则报错,所以const修饰的栈常量本质是可以修改的。其实a那个地址的内存单元已经被修改成了9500,只不过是在编译时候,把a的值的位置都替换成了1000,所以汇编时候那个位置都是1000,在反汇编时候,发现直接是把3E8h直接移到了edx中。我们分析一下反汇编代码。
2024-04-30 19:37:21
219
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人