
编程总结
悟道修炼中
百度资深工程师,擅长图像、文本检索
展开
-
局部性原理
局部性原理:如果在同一个地方、同一个时间犯了错,那么将很可能继续在同一地方犯错。昨天,早上更新数据时忘记去重文件中的不可见字符,原因是我更新数据没有严格按照自己之前的流程来操作,导致xml工具处理数据失败,耽误了同事的进度;同一天,下午,为了赶着8点下班,7点把代码提交给mentor审核,mentor指出了2个问题,然后马上知错就改,并想着早点走,改完后再提交,mentor又在我改的地方找...原创 2019-10-17 17:48:09 · 606 阅读 · 0 评论 -
各种排序算法代码
一、选择排序输入:int a[10] = { 3, 2, 5, 9, 0, 7, 1, 6, 5, 4 };void swap(int *a,int *b){ *a^=*b; *b^=*a; *a^=*b;}核心代码为: for (int i = 0; i < 9; i++){ int min = a[i]; for (int j =原创 2016-07-02 18:59:27 · 846 阅读 · 0 评论 -
printf压栈出栈
printf函数的压栈顺序是从右到左压栈,计算表达式值的顺序也是从右到左,由于输入数据类型的多样性,压栈的时候是将地址入栈例子:#include <iostream>using namespace std;int main(){ int arr[] = { 6, 7, 8, 9, 10 }; int *ptr = arr; *(ptr++) += 123; pri原创 2016-08-21 11:40:36 · 3996 阅读 · 5 评论 -
VS使用技巧
Solution文件一个简单的Solution file如下: GUID列表:http://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDsvcxproj原创 2015-12-02 14:59:10 · 640 阅读 · 0 评论 -
matlab获取图像的轮廓
输入一个二值图像,输出图像的轮廓。function [bmap] = seg2bmap(seg,width,height)% [bmap] = seg2bmap(seg)%% From a segmentation, compute a binary boundary map with 1 pixel wide% boundaries. The boundary pixels are of原创 2017-12-18 18:34:31 · 5209 阅读 · 0 评论 -
如何计算两个矩形框的IoU
由于最近跟别人说我搞过目标检测,然后被问到一个问题,如何计算两个矩形框的IoU? 一开始我回答说可以采用OpenCV的&运算和|运算来计算IoU,但他要我不采用OpenCV 的接口,自己写。当时我回答的比较乱,分4种情况进行讨论2个矩形框之间的位置关系,最后他告诉我说,根本不需要讨论,采用max(),min()就可以实现。囧。大致做法是先求出2个矩形框的交集,交集也是矩形框或空,计算相交...原创 2018-05-15 20:23:19 · 4387 阅读 · 3 评论 -
测试运算所需时钟周期数
看了博客:加减乘除、开根号、log等C代码实现需要多少个时钟周期 。 决定亲自试一把。逻辑是:假定CPU一直在执行加减乘除等操作,那么让cpu循环执行N次,得到总的时间t,再cat /proc/cpuinfo得到CPU的主频大小f,根据公式t*f/N即可得到每次运算所需的时钟周期数。CPU型号为:Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz比如对于开根号:#i...原创 2018-06-02 16:50:17 · 6124 阅读 · 2 评论 -
如何判断随机变量是否服从正态分布
(分布检验问题)假设有n个随机数,检验这些随机数是否由高斯分布产生,方法如下:1. 计算n个随机变量的平均值u;2. 对n个随机变量排序,并计算相邻两个数的差dx;3. 对第2个数到第n个数,计算z[i]=(x[i]-u)/dx;4.求出max{z[i]},min{z[i]},将区间[min,max]划分n份,统计属于前i个区间的z[j]元素个数,即满足z[j]<=min+(...原创 2019-01-19 12:14:58 · 17437 阅读 · 0 评论 -
python 中list与array互相转换。
将array转成list比较简单,如下:#array to listimport numpy as np #array模块,但其只支持一维数组,不支持多维数组,也没有各种运算函数。#matrix=[0 for i in range(4)] #这样定义的数组时list object,可以拿list当数组用matrix_array=np.random.randint(0,3,(2,3)...原创 2019-01-22 15:12:56 · 99155 阅读 · 4 评论 -
python 统计目录下文件匹配并计数
talk is cheap,show you the code:import fnmatchimport osdef count_files(directory, prefix_list): lst = os.listdir(directory) cnt_list = [len(fnmatch.filter(lst, '*'+x)) for x in prefix_li...原创 2019-01-22 15:54:05 · 1010 阅读 · 0 评论 -
python实现一个tenCrop的函数
虽然torchvision.transforms模块实现了"RandomResizedCrop", "RandomSizedCrop", "FiveCrop", "TenCrop"等函数,本文写下另一个实现,方便自己随便改写Tencrop的实现代码。如下所示:import numpy as npdef flow_stack_oversample(flow_stack, crop_d...原创 2019-01-22 16:31:41 · 1041 阅读 · 0 评论 -
(int32/uint32)整数压缩与解压缩算法---VB编码
对网络包进行压缩可以减少网络带宽,提高传输效率, 很多时候一些报文中包含一些无符号整数,比如报文头中的长度信息.正常情况下一个无符号整数占用32位从0x0000 0000 到 0xFFFF FFFF .由于一个无符号整数始终占据着4字节内存,就算是1也会占据着4个字节,其实只要1字节就可以保存了.(要想压缩整数,基本算法思想是压缩在4字节之内也就是1,2,3,4.把无符号整数进行逻辑分...转载 2019-06-09 22:10:44 · 2203 阅读 · 0 评论 -
boost::function
一、介绍boost::function 就是一个函数的包装器(function wrapper),用来定义函数对象。它的概念很像广义上的回调函数。它以对象的形式封装了原始的函数指针或函数对象,能够容纳任意符合函数签名的可调用对象。因此,它可以被用于回调机制,暂时保管函数或函数对象,在之后需要的时机在调用,使回调机制拥有更多弹性。回调函数的一种形式就是:C语言中的typedef 返回类型 (*poi原创 2016-06-05 19:58:15 · 1012 阅读 · 0 评论 -
glog使用
一.简单 Demo#include <glog/logging.h>int main(int argc,char* argv[]){ LOG(INFO) << "Hello,GLOG!";} 链接时,需要 -lglog ,也可能会需要 -lunwind -lpthread (有一次遇到的,记不起来了,一般不需要) 执行时,可使用 ./glogdemo 将日志输出到 stderr,可使用转载 2016-05-12 20:39:47 · 2006 阅读 · 0 评论 -
using关键字的使用
在using namespace std和使用Eigen等一些库的时候,经常看到使用using关键字。 using关键字在C++11之前和C++11之后的含义不一样。using的作用是把后面的那个item放到当前的作用域中。 C++11之后using的使用1.引入命名空间可以在当前函数中,或者当前文件中引用命名空间。using namespace std;using namespace cv;原创 2015-12-10 11:17:31 · 1317 阅读 · 0 评论 -
C++代码质量检查工具-----Cpplint
cpplint.py suffers from both false positives and false negatives. False positives can be eliminated by tagging lines with // NOLINT (or // NOLINT(rule) to suppress only the incriminated rule category).原创 2015-12-11 15:30:58 · 4574 阅读 · 0 评论 -
gflags的使用
简介在Linux下我们常用gcc –version命令,find –help命令,可是这些命令是怎么实现的呢?本文以实例的形式说明gflags是如何实现上述命令的。引用http://www.yeolar.com/note/2014/12/14/gflags/的一段话。 GFlags是Google开源的一个命令行flag(区别于参数)库。和 getopt() 之类的库不同,flag的定义可以散布在各原创 2015-12-10 21:10:34 · 2628 阅读 · 0 评论 -
glog的使用
#include <glog/logging.h>#include <iostream> int main(int argc, char* argv[]){ // Initialize Google's logging library. google::InitGoogleLogging(argv[0]); FLAGS_log_dir = "I:/"; st原创 2015-12-10 21:57:39 · 1724 阅读 · 1 评论 -
Boost库命名规则
Boost官网的《Geting Started On Windows》(http://www.boost.org/doc/libs/1_38_0/more/getting_started/windows.html)提到了Boost库的命名,摘录如下:以 libboost_regex-vc71-mt-d-1_34.lib 为例:lib 前缀:除了Microsoft Windows转载 2015-12-12 20:37:22 · 829 阅读 · 0 评论 -
函数渐进性的O, Ω ,Θ的表示
一、定义对于任何函数f(n)f(n)都可以用O,Ω,ΦO, Ω ,Φ来表示当n→∞n\rightarrow∞时的阶的情况,可以把O,Ω,ΦO, Ω ,Φ分别看成是≥,≤,=≥,≤,=,分别估计了函数的渐进上界,渐进下届和准确界。定义表示如下:1.第一种定义: 设函数f(n)f(n)代表某一算法在输入大小为nn的情况下的工作量(效率),假设f(n)f(n)、g(n)g(n)非负单调,且极限存在,则原创 2015-12-30 10:09:47 · 10013 阅读 · 0 评论 -
boost库的编译和使用
编译: 1.从http://sourceforge.net/projects/boost/files/boost/1.55.0/下载boost源代码 2. 在工具栏启动 “VS2013 开发人员命令提示”,进入boost的解压目录,即D:\boost_1_55_0, 输入bootstrap,便在boost根目录下生成bjam.exe文件。 3. bjam –showlibararies显示原创 2016-01-16 23:39:31 · 740 阅读 · 0 评论 -
C++的一些知识
1.对于一个空类,例如class EmptyClass{}; 虽然你没有声明任何函数,但是编译器会自动为你提供上面这四个方法。class EmptyClass { public: EmptyClass(); // 默认构造函数 EmptyClass(const EmptyClass &rhs); // 复制构造函数原创 2015-12-18 21:06:57 · 629 阅读 · 0 评论 -
CMakeList.txt学习
PROJECT() 可以生成native编译配置文件,在linux/unix平台,生成makefile,在mac平台可以生成xcode,在windows平台可以生成msvc工程的配置文件PROJECT(projectname [CXX] [C] [JAVA]) 这个执行是用来定义工程的名称的和定义工程支持的语言。这个指令也隐式的定义了两个cmake变量:_BINARY_DIR以及_原创 2015-11-30 16:59:58 · 2998 阅读 · 0 评论 -
迷惑的typedef
#include<iostream>using namespace std;typedef int arr5[5];typedef arr5* p_arr5;typedef p_arr5 arrp10[10];arr5 togs; //togs是具有5个元素的int数组p_arr5 p2;原创 2015-12-03 11:00:07 · 662 阅读 · 0 评论 -
D3.js学习
为什么要学习D3.js啊?因为最近在看一本陈为等写的《数据可视化》书,看到书中所写的东西觉得很炫的同时,感觉可视化方法大有用处。另外,去年还听过袁晓如等人讲的《数据可视化技术前沿讲座》,一直就对可视化技术感兴趣,在加上最近在想一个如何从视觉的角度看待bit的问题,于是更对可视化有强烈的兴趣了。可视化的艺术化表现的一个案列就是,一个艺术家将pi=3.14.15926535。。。用一种巧妙的方法呈现出来原创 2015-12-02 20:38:41 · 790 阅读 · 0 评论 -
如何让一个类不能被继承
要想让一个类不能被继承,已知方法有两种。一是,将类的构造函数定义为带private属性。二是,将该类虚继承一个父类,但是该父类的构造函数是带private属性的。 关于第二个方法可行的依据是: 1)派生类不能调用父类private属性的构造函数。 2)建立一个对象是,如果这个对象中含有从虚基类继承来的成员,则虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的。 3)以上原创 2015-12-03 11:56:36 · 6625 阅读 · 2 评论 -
如何实现单例模式
class Singleton {public: static Singleton& getInstance (void) { if (! s_instance) { pthread_mutex_lock (&s_mutex); if (! s_instance) s_instance = ne转载 2016-04-03 23:53:15 · 628 阅读 · 0 评论 -
namespace使用总结
简介命令空间非常常见,各种面向对象语言都有这个词,C#中,Java中有package,甚至连数据序列化语言XML中也出现命名空间。 命名空间就是为解决C++中的变量、函数的命名冲突而服务的。网上有人比喻说命名空间的作用就相当于文件夹,归类用的。首先要了解下作用域: 现代标准C++中作用域分4种,代码块({……},如复合语句和函数体)、类、全局和命名空间。 命名空间可以是全局的,也可以位于原创 2015-12-11 11:55:11 · 6517 阅读 · 0 评论 -
一种根据输入动态执行函数
typedef int (*BrewFunction)();//函数指针类型变量typedef std::map<string, BrewFunction> BrewMap;BrewMap g_brew_map;//全局变量#define RegisterBrewFunction(func) \namespace { \class __Registerer_##func { \ publ原创 2016-05-12 20:15:51 · 1008 阅读 · 0 评论 -
输入两个整型数组,返回一个数组:两个数组中的公共值。
#include #include #include using namespace std;vectorQT;priority_queue,greater >Q;int main(){ int n,m; scanf("%d%d",&n,&m); while (n--) { int x; scanf("%d",&x); Q.push(x); } while (原创 2014-10-26 20:22:57 · 4198 阅读 · 2 评论