- 博客(40)
- 资源 (3)
- 收藏
- 关注
原创 用Python实现的PID控制算法的演示
看了看PID控制算法的原理,自己用Python的matplotlib简单写了一个控制小球到指定位置的小演示。如果小球不在指定的高度,就计算误差,再输入一个控制信号——这里是加速度a,以便驱动小球运动,从而改变小球的位置。不停的计算:计算高度误差,计算输出的信号——加速度a,计算新的速度,计算新高度。如果只考虑小球当前位置和指定高度的误差,始终会来回摆动,无法进入稳定状态。如果用到P...
2020-04-08 17:51:10
6802
3
原创 Python实现的LBP特征提取
# -*- coding: utf-8 -*-import cv2import numpy as npimport mathimport osimport matplotlib.pyplot as plt# 取得给定的LBP字符串的最小二进制值,实现旋转不变形def Rotate_LBP_Min(str_lbp_input): str_lbp_tmp = str_lbp_i...
2019-03-11 17:20:05
7251
2
原创 Python和tensorflow的一些常用代码
1.为数据增加维度# Price是一个1行5列的矩阵,注意列表是两层,表示是二维的:[ [] ]Price = np.array([[15.90, 16.26, 10.1, 19.19, 25.33]])# 生成的是一个1维矩阵mylist = np.array([1, 2, 3])# 在1维矩阵的基础上增加一个维度,成为2维矩阵mylist2 = mylist.[:, np....
2018-12-18 15:18:09
650
原创 Python写BP神经网络(二):带偏置的3层结构BPNN
理解了BP神经网络的原理,接下来实现一个比较正常的BP神经网络:3个输入节点,3个隐含层节点,2个输出节点。对Numpy不是很熟悉,看例子琢磨了好久,才做通,还是不错。一点体会:Numpy真是强。import numpy as np# --------------------------------------------# 激活函数# 当derive为True时,是对sigmoid函数求...
2018-05-25 17:57:04
2757
2
原创 利用Python写BP神经网络(一):无偏置的BPNN
第一个最简单的BPNN:包括3个输入层节点,3个隐含层节点,1个输出层节点。学习样本为5个,每次都把5个学习样本都学习一遍,直到学习次数达到预设的次数。每次学习都记录下误差(或者叫损失)。为了简单,隐含层和输出层暂时不考虑偏置,等下一次再考虑。训练了1000次,误差在0.05多些,然后损失就下降得很慢了,估计增加偏置后会好些。import numpy as np# --------------...
2018-05-22 22:12:50
1975
原创 入门——感知机训练
根据感知机学习规则,分类直线与权重向量正交。如果开始的分类直线计算出来的Yj与预期输出Dj之间有误差Ej=Dj-Yj,就应该把连接权重Wj的方向依据学习向量X调整。正误差时,Wj朝着X调整,因此,Wj(t+1)=Wj(t)+n*Ej*X.据此,在Python中实现最简单的逻辑与的感知机学习代码:import numpy as np#--------------------------------...
2018-05-11 14:42:21
1443
原创 C#4.5访问Access2010以上数据库
因为一个小应用要用到数据库,为了简单,就打算使用Access数据库。结果发现C#4.5不能直接访问.accdb的数据库了。按网络文章提示,到微软下了AccessDBEngine,更换了连接字符串:connectionString="Data Source=.\\xxx.accdb;Provider=Microsoft.ACE.OleDb.12.0" providerName="Microsoft....
2018-03-25 22:39:52
541
原创 用指向指针的指针对字符串进行排序
用指向指针的指针,对字符串进行排序。指向指针的指针,就是char ** pptr啦。pptr是一个指针,指向的地址内容存储的又是指向字符串的指针。因此,首先要为pptr分配内存,存放指针,可以申请一个连续的区域来存放多个指向字符串的指针。char ** pptr;//为5个指针分配地址pptr = (char**)malloc(5*sizeof(char*));//再依次为
2016-11-17 11:16:17
1693
原创 [SCU2016年题]有两个已排序的单链表,合并问题
有两个单链表,已经按非减排序,要求完成两个链表的合并,也要非递减排序,并且不能使用除当前2个链表以外的存储空间。 其中,允许有重复元素存在。
2016-03-27 22:05:59
693
原创 查找子串substr()函数的实现——循环
实现查找子串的substr(char *s1, char *s2)函数。如果在s1中找到了s2,就返回位置;否则返回-1。int hjd_substr(char *s1, char *s2){ int nResult = -1; int i=0, j=0; while ((*(s1+i)!='\0')&&(*(s2+j)!='\0')) {
2016-03-24 19:39:44
892
原创 位操作——循环右移n位
把一个整数,循环右移n位,输出结果。循环右移的意思是,地位右移后出现在最左边。例如:1100 0101,循环右移2位后,得到 0111 0001,最高的2bit是'01',就是原来最低2bit。一个办法是循环来解决;还有一个直接的办法,把地位n个bit直接挪到高位去。此外,如果n很大,循环了1轮以上,那么只需要考虑n相对于位宽的余数。unsigned int rotate_
2016-03-21 17:50:00
4503
原创 求零幺字符串的最长子串的长度——利用状态图解决
一种字符串由字符‘0’和‘1’组成,没有其他字符,以‘\0’表示字符串结束,称这种字符串为“零幺串“。计算一个输入的”零幺串“中,最长的连续‘0’或连续’1‘的长度。例如:”01110001111101“的最长连续子串是1-子串,其长度为5。可以利用状态图来理清计算思路,如下图:预设有0状态和1状态。在0状态下:(1)如果读入的字符是’0‘,那么仍然留在0状态,并且
2016-03-21 16:14:24
878
原创 求2个字符串的最长公共子串——矩阵法
有2个字符串,求它们的最长的公共子串,不是公共子序列,要连续。 例如:str1=“abcabce",str2="bcacabcgef",那么最长的公共子串为”cabc“。 最直观的办法是用矩阵法,累计记录最长子串的长度和位置。int hjd_longest_common_substr(char *str1, char *str2, char *strresult){
2016-03-19 22:51:45
596
原创 判断谁说真话,谁说假话
A,B,C,D,E共5个人围成一圈,每人头上戴了一顶帽子,帽子可能是黑色或白色。戴白帽子的人说真话,戴黑帽子的人说假话。A说:我看到3个人戴白帽子,1个人戴黑帽子;B说:我看到4个人戴黑帽子; C说:我看到1个人戴白帽子,3个人戴黑帽子;D说:我看到4个人戴白帽子。E什么话都没说。编程计算出这5个人谁戴白帽子、谁戴黑帽子。 【思路】戴白帽子算做1(真),戴黑帽子算做
2016-03-11 16:17:36
3002
原创 Raspberry Pi超声波测距样例
Raspberry Pi,也买了一块2B(这型号...)板子和一堆小器件慢慢摸索。先从比较简单的超声波测距模块开始弄。为了方便,把RPI的GPIO槽通过延长线接到专门的扩展槽,再插到面包板上,方便通过引线连接器件。使用的超生模块型号是HC-SR04,有4个引脚:VCC——供电;Trig——触发控制端;Echo——输出反馈端;GND——接地端。工作流程为:(1)给Tr
2016-03-11 11:15:42
1371
原创 从两个文件读数据,排序后输出到新文件
文件"A"和文件“B"分别已经存放有按照递增顺序排好序的小数,请将两个文件中的数据读出来写到文件”C"中,并同样按照递增顺序存入文件之中。目前想到的是设一个大数组,依次从A、B文件读入数据,然后对这个大数组排序,然后保存到C文件。有一点不满意的是,数组有尺寸限制。void bubble_sort(double *ar, int rcount);void resortToFi
2016-03-06 22:48:56
892
原创 比赛分组(二)——更通用的解法
两支乒乓球队进行比赛,各出3人,甲队有A、B、C三人,乙队有X、Y、Z三人。 A不跟X比赛,C不跟X或Z比赛。 请问应该如何分组? 思路: 前面用3个嵌套的循环来解决了问题。但是,假如参赛人数多了以后,嵌套的循环太深了。 尝试寻找更通用、简洁的办法——类似N皇后问题的解决思路,递归。 甲组可以依次固定,A先选择乙组的对手;然后B来选对手,
2016-03-04 18:24:24
544
原创 比赛分组问题(一)
两支乒乓球队进行比赛,各出3人,甲队有A、B、C三人,乙队有X、Y、Z三人。 A不跟X比赛,C不跟X或Z比赛。 请问应该如何分组? 思路: A依次从乙队选对手(序号设为i); B再依次从乙队选对手(序号设为j,这时A选过的对手不能再选,即 j!=i); C再依次从乙队选对手(序号设为k,这时A、B选过的对手都不能再选,即 k!=i并且k!
2016-03-03 22:36:20
1127
原创 N只猴子选大王(用模拟过程的方法解决)
N只猴子,围成一圈,从1开始报数,数到M的猴子退出,最后剩下一只猴子就选为大王。此题是约瑟夫环问题,可以推导出公式答案。不过,也可以用模拟过程的方法来解决。首先定义猴子结点类型:typedef struct st_Monkey{ int SN; struct st_Monkey * pNext; struct st_Monkey * pPre;}C
2016-02-22 17:05:27
1456
原创 Ubuntu 14.04LTS修改显示分辨率
在虚拟机上安装了Ubuntu14.04LTS,但是始终在设置面板里找不到合适的分辨率。只有自己设置合适的显示分辨率了。1. 在字符终端先利用cvt命令探测出自定义分辨率的参数,如下:2.接着就利用检测出的参数新增一个显示模式,名称和参数必须一致。 如上图,显示模式的名称为“1400x860_60.00"。3. 然后再把新的显示模式增加到显示分辨率选择列表中:s
2016-02-17 16:27:09
2162
原创 N层楼梯上楼方式总数
有N层楼梯,每次只能上1层或2层,求一共有多少种上楼的方式。思路:最后一次上楼,可以是上1层,也可以是上2层,则F(N)=F(N-1) + F(N-2),类似斐波那契数列就很明显了。F(1)=1;F(2)=2.int F(int n){ if(n return(0); else if (n==1) return(1
2016-02-15 16:59:49
734
原创 字符串替换-K&R C 题3-2
把字符串中制表符(‘\t')和换行符('\n')替换为字符串“\t”和“\n”。不难,但是要注意最后要把目标字符串尾部加上’\0'结束符。int main(void){ char *s = (char*)malloc(128); strcpy(s, "Hello\tWorld. I'm a robot.\nNice to meet you."); ch
2016-02-05 12:40:30
471
原创 递归-N个不相同的元素,输出所有可能的排列
前一个日志解决了1-N个数字的排列。假如是N个不同元素的排列,就要用到2个数组,不能简单再用变量i来模拟了。 但是,解决问题的思路是一样的,还是在每个位置上遍历所有可能,判断能否放置该元素,然后向后移动,直到结尾。//判断B[pos]的元素在A[]中是否已经出现过int can_place_1(int *A, int *B, int j, int pos){ int
2016-01-11 18:36:13
761
原创 递归-解决遍历1-N的数排列输出
1,2,3,...,N,把每种排列都输出,一共有N!种排列。 例如:1,2,3,那么输出: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1#include #include #include int can_place(int *A, int i, int pos){ int res=
2016-01-07 17:44:44
667
原创 N皇后问题
八皇后问题是十九世纪著名数学家高斯于1850年提出的。问题是:在8*8的棋盘上摆放8个皇后,使其不能互相攻击,即任意的两个皇后不能处在同意行,同一列,或同意斜线上。 可以把八皇后问题拓展为n皇后问题,即在n*n的棋盘上摆放n个皇后,使其任意两个皇后都不能处于同一行、同一列或同一斜线上。 不用二维数组,就用一个一维数组A[N],A[0]=x0表示第一列皇后在第x0行,依次A[i]
2016-01-02 20:43:41
455
原创 求一条直线经过一个直角坐标系里m个点最多点的点数
typedef struct POINT{ double x; double y;}Point;输入点数和各个点的坐标:void hjd_init_points(){ printf("please input the number of points:\n"); int nM=0, nPos=0; scanf("%d", &nM); Point
2015-11-08 15:43:31
566
原创 排序一:快速排序
快速排序是内部排序的一种,即数据保存在内存中,而非文件中。基本思想是以一个基准值(通常选第一个数据),通过一次扫描和移动数据,让基准值右边所有的数据(无序)都比基准值大,左边的数据(无序)都比基准值小。然后再用同样的方法扫描和移动两边的数据,直到最后2个数据为基本单位,按大小排列,最终完成整个数据序列的排序。以{3, 4, 2, 1, 6, 5, 9, 8, 7, 0}为例子。第一次扫
2015-10-05 12:27:00
403
原创 约瑟夫环问题
约瑟夫环问题是一个数学的应用问题:已知M个人(以编号1,2,3...M分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到N的那个人出列;他的下一个人又从1开始报数,数到N的那个人又出列;依此规律重复下去,直到圆桌周围的人只剩下一人。一、问题的来历 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞
2015-07-17 22:56:34
653
原创 有物品数量限制的背包问题
解决思路:利用递归,1...N个物品,每种有Amount[i]个,那么从第N个物品开始选择,选0个、...、Amount[i]个第N个物品,依次计算价值,找出最大的,返回。F(N) = max{ F(N-1, Lmt-n*Cost(n)) + n*Value(n), | n=0,..., Amount[i]}。#ifndef HJD_SNACKBACK_H_#define HJD_S
2015-07-17 20:38:34
4928
原创 位操作(一)
int hjdfunc(int nX, int nY){ return(nX&nY+((nX^nY)>>1)));}问:hjdfunc(50, 70)返回多少?不能用笨办法,把50、70转成2进制。(nX+nY)/2,可以考虑成:(1)两个2进制数先把都是‘1’的位相加再除以2;(2)把不同的位上相加,即‘0’对应‘1’,然后再除以2;(3)前两部分相加,
2015-07-06 22:23:08
353
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人