自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 资源 (2)
  • 收藏
  • 关注

原创 C#中CLR(公共语言运行时)与IL(中间代码)

.net平台中的CLR首先要说明的是,.NET平台与C#不是一回事 它是C#,VB.net等程序运行的平台。CLR是公共语言运行时,是 .NET Framework的重要组成部分。它提供了内存管理、线程管理和异常处理等服务,而且还负责对代码实施严格的类型安全检查,保证了代码的正确性。事实上,类型安全(Type Checker)、垃圾回收(Garbage Collector)、异常处理(Excep

2016-05-20 15:00:35 11025

原创 Java中的JIT机制对运行速度的优化

在先前的博客,Javac编译过程,简略讲述了Java compiler(javac),可以看出javac和C的compiler不一样, 它产生的是统一规格、与机器 binary 格式无关的 bytecode。 但是这也导致了严重的问题, interpret 通常比直接 compile 成 平台限定的原生 binary 码来得慢。但经过JIT的优化后,有些Java代码的执行速度甚至比c c++的更快。

2016-05-18 18:15:34 7536 2

原创 Javac编译过程

Javac编译器将*.java文件编译成为*.class文件的过程,这里的Javac编译器称为前端编译器;相对应的还有后端编译器,它在程序运行期间将字节码转变成机器码。

2016-05-17 11:52:54 6248

原创 矩阵奇异值分解与照片压缩、去噪

#从特征值分解引入 我们知道矩阵的特征值分解是提取矩阵特征的一个方法,其中v是一个一维矩阵,λ是特征值,代表v表示的矩阵特征的重要性。但矩阵的特征值分解有一个局限性,在于变换的矩阵必须是方阵。奇异值分解现实世界中大部分矩阵都不是方阵,这时如果我们想描述矩阵的特征,就要用到奇异值分解。 假设A是一个N * M的矩阵,那么得到的U是一个N * N的方阵(里面的向量是正交的,U里面的向量称为左奇异向

2016-04-23 18:14:14 11501 2

原创 python 模拟登陆leetcode

模拟登陆,首先要知道提交页面的网址,和每次post的内容,采用chrome的浏览器的开发者工具,查看。得到下图可以看到提交的内容包括”csrfmiddlewaretoken”、”login”、”password”,后两个是用户名和密码,第一个应该是一中验证机制,每次打开页面都会随机生成一个,果不其然,在网页的代码中找到 这样,我们只要每次把登陆界面的csrf值扣出来,然后放到和用户名,密码放到一个

2016-03-25 20:41:52 4409 4

原创 用python生成验证码图片

引入基本上大家使用每一种网络服务都会遇到验证码,一般是网站为了防止恶意注册、发帖而设置的验证手段。其生成原理是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR)。下面就详细讲解如何生成验证码。所需环境除了配置好的python环境外,还需要配有python中的PIL库,这是python中专门用来处理图片的库。用传统的pip install 方法或者下载源码 p

2016-01-28 12:11:27 12358 3

原创 Java序列化Serializable解析

引入我们知道在java中一切即对象,那我们如果想存储对象或者传送对象时该怎么办?对象又不是字节或者字符,不能直接用输入输出流来进行读写。这时就用到序列化了。概念维基百科上的定义是: 对同步控制而言,表示强制在同一时间内进行单一存取。 在数据储存与传送的部分是指将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等,或者透过网络传送资料时进行编码的过程,可以是字节或是XML等格式。而字节的或

2016-01-26 14:32:39 2782 3

原创 21行python代码实现拼写检查器

引入大家在使用谷歌或者百度搜索时,输入搜索内容时,谷歌总是能提供非常好的拼写检查,比如你输入 speling,谷歌会马上返回 spelling。 下面是用21行python代码实现的一个简易但是具备完整功能的拼写检查器。代码import re, collectionsdef words(text): return re.findall('[a-z]+', text.lower()) def tra

2016-01-24 14:11:35 13550 9

原创 SonicOperator之数据处理

数据清洗对数据进行重新审查和校验的过程,目的在于删除重复信息、纠正存在的错误,并提供数据一致性。 在进行常规的检验数据的时候,根据基本原则,去掉重复数据与冲突数据。将采集到的数据视为均匀分布在设定的特征值数量的情况下,根据得到的数据分布选择适当的插值来补充缺失的特征。对于这样经过快速傅立叶变换后的数据,经过多次实验,最终选择牛段插值法。 数据降噪 信息中的噪声数据的变化波动幅度相对于整体数据

2017-06-17 18:19:43 645

原创 SonicOperator之超声波

多普勒效应是波源和观察者有相对运动时,观察者接受到波的频率与波发出的频率并不相同的现象。远方急驶过来的火车鸣笛声变得尖细(即频率变高,波长变短),而离我们而去的火车鸣笛声变得低沉(即频率变低,波长变长),就是多普勒效应的现象,同样现象也发生在私家车鸣响与火车的敲钟声。 超声波,又称超音波,是指任何声波或振动,其频率超过人类耳朵可以听到的最高阈值20kHz(千赫)。因而我们利用手机发出超声波,人耳不

2017-06-17 18:18:56 773

原创 SonicOperator之傅里叶变换10

好了,刚才我们已经看到了大海——连续的傅里叶变换频谱,现在想一想,连续的螺旋线会是什么样子:想象一下再往下翻:是不是很漂亮?你猜猜,这个图形在时域是什么样子?哈哈,是不是觉得被狠狠扇了一个耳光。数学就是这么一个把简单的问题搞得很复杂的东西。顺便说一句,那个像大海螺一样的图,为了方便观看,我仅仅展示了其中正频率的部分,负频率的部分没有显示出来。如果你认真去看,海螺图上的每一条螺旋线都是可以清楚的看到的

2017-06-11 22:37:37 542

原创 SonicOperator之傅里叶变换9

六、指数形式的傅里叶变换有了欧拉公式的帮助,我们便知道:正弦波的叠加,也可以理解为螺旋线的叠加在实数空间的投影。而螺旋线的叠加如果用一个形象的栗子来理解是什么呢?  光波高中时我们就学过,自然光是由不同颜色的光叠加而成的,而最著名的实验就是牛顿师傅的三棱镜实验:所以其实我们在很早就接触到了光的频谱,只是并没有了解频谱更重要的意义。但不同的是,傅里叶变换出来的频谱不仅仅是可见光这样频率范围有限的叠加,

2017-06-11 22:36:15 562

原创 SonicOperator之傅里叶变换8

虚数i这个概念大家在高中就接触过,但那时我们只知道它是-1 的平方根,可是它真正的意义是什么呢? 这里有一条数轴,在数轴上有一个红色的线段,它的长度是1。当它乘以 3 的时候,它的长度发生了变化,变成了蓝色的线段,而当它乘以-1 的时候,就变成了绿色的线段,或者说线段在数轴上围绕原点旋转了 180 度。我们知道乘-1 其实就是乘了两次 i 使线段旋转了 180 度,那么乘一次 i 呢——答案很简单

2017-05-29 10:20:02 710

原创 SonicOperator之傅里叶变换7

相信通过前面三章,大家对频域以及傅里叶级数都有了一个全新的认识。但是文章在一开始关于钢琴琴谱的例子我曾说过,这个栗子是一个公式错误,但是概念典型的例子。所谓的公式错误在哪里呢?傅里叶级数的本质是将一个周期的信号分解成无限多分开的(离散的)正弦波,但是宇宙似乎并不是周期的。曾经在学数字信号处理的时候写过一首打油诗:往昔连续非周期,回忆周期不连续,任你ZT、DFT,还原不回去。(请无视我渣一样的文学水平

2017-05-29 10:17:42 624

原创 SonicOperator之傅里叶变换6

下面我们继续说相位谱:通过时域到频域的变换,我们得到了一个从侧面看的频谱,但是这个频谱并没有包含时域中全部的信息。因为频谱只代表每一个对应的正弦波的振幅是多少,而没有提到相位。基础的正弦波A.sin(wt+θ)中,振幅,频率,相位缺一不可,不同相位决定了波的位置,所以对于频域分析,仅仅有频谱(振幅谱)是不够的,我们还需要一个相位谱。那么这个相位谱在哪呢?我们看下图,这次为了避免图片太混论,我们用7个

2017-05-28 22:08:36 590

原创 SonicOperator之傅里叶变换5

三、傅里叶级数(Fourier Series)的相位谱 在这一章最开始,我想先回答很多人的一个问题:傅里叶分析究竟是干什么用的?这段相对比较枯燥,已经知道了的同学可以直接跳到下一个分割线。先说一个最直接的用途。无论听广播还是看电视,我们一定对一个词不陌生——频道。频道频道,就是频率的通道,不同的频道就是将不同的频率作为一个通道来进行信息传输。下面大家尝试一件事:先在纸上画一个sin(x),不一定标

2017-05-28 22:07:17 616

原创 SonicOperator之傅里叶变换4

介绍完了频域的基本组成单元,我们就可以看一看一个矩形波,在频域里的另一个模样了: 这是什么奇怪的东西?这就是矩形波在频域的样子,是不是完全认不出来了?教科书一般就给到这里然后留给了读者无穷的遐想,以及无穷的吐槽,其实教科书只要补一张图就足够了:频域图像,也就是俗称的频谱,就是—— 再清楚一点: 可以发现,在频谱中,偶数项的振幅都是0,也就对应了图中的彩色直线。振幅为 0 的正弦波。

2017-05-20 14:39:30 600

原创 SonicOperator之傅里叶变换3

如果我们把第一个频率最低的频率分量看作“1”,我们就有了构建频域的最基本单元。对于我们最常见的有理数轴,数字“1”就是有理数轴的基本单元。(好吧,数学称法为——基。在那个年代,这个字还没有其他奇怪的解释,后面还有正交基这样的词汇我会说吗?)时域的基本单元就是“1 秒”,如果我们将一个角频率为\omega_{0} 的正弦波 cos(\omega_{0} t)看作基础,那么频域的基本单元就是\omega

2017-05-20 14:36:43 488

原创 SonicOperator之傅里叶变换2

二、傅里叶级数(Fourier Series)的频谱还是举个栗子并且有图有真相才好理解。如果我说我能用前面说的正弦曲线波叠加出一个带 90 度角的矩形波来,你会相信吗?你不会,就像当年的我一样。但是看看下图: 第一幅图是一个郁闷的正弦波 cos(x)第二幅图是 2 个卖萌的正弦波的叠加 cos (x) +a.cos (3x)第三幅图是 4 个发春的正弦波的叠加第四幅图是 10 个便秘的正弦波的

2017-05-08 22:14:16 578

原创 SonicOperator之傅里叶变换1

一、什么是频域从我们出生,我们看到的世界都以时间贯穿,股票的走势、人的身高、汽车的轨迹都会随着时间发生改变。这种以时间作为参照来观察动态世界的方法我们称其为时域分析。而我们也想当然的认为,世间万物都在随着时间不停的改变,并且永远不会静止下来。但如果我告诉你,用另一种方法来观察世界的话,你会发现世界是永恒不变的,你会不会觉得我疯了

2017-05-08 22:12:19 692

原创 SonicOperator之超声波

超声波,又称超音波,是指任何声波或振动,其频率超过人类耳朵可以听到的最高阈值20kHz(千赫)。超声波由于其高频特性而被广泛应用于医学、工业等众多领域。某些动物,如犬只、海豚、以及蝙蝠等等都有着超乎人类的耳朵,也因此可以听到超声波。亦有人利用这个特性制成能产生超声波来呼唤犬只的犬笛。所谓超声波,只透过具有弹性与惯性介质,如空气,当空气本身一旦产生膨胀或压缩时,透过其分子的运动而有波动的传拨产生。因此

2017-05-07 19:14:04 688

原创 SonicOperator之多普勒效应

多普勒效应是波源和观察者有相对运动时,观察者接受到波的频率与波源发出的频率并不相同的现象。远方急驶过来的火车鸣笛声变得尖细(即频率变高,波长变短),而离我们而去的火车鸣笛声变得低沉(即频率变低,波长变长),就是多普勒效应的现象,同样现象也发生在私家车鸣响与火车的敲钟声。 这一现象最初是由奥地利物理学家多普勒1842年发现的。荷兰气象学家拜斯·巴洛特(Buys Ballot)在1845年让一队喇叭手

2017-05-07 19:12:58 1152

原创 Node.js模块导出exports 和 module.exports 的区别

关于exports和module.exports的关系可以总结为 1. module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {} 2. exports 是指向的 module.exports 的引用 3. require() 返回的是 module.exports 而不是 exports

2016-07-20 12:47:34 16729

原创 Lodash,npm包仓库中依赖最多的库

简介lodash,是具有一致接口、模块化、高性能等特性的 JavaScript 工具库。提供了大量的工具函数,也正是因为这个原因,使得lodash成为了npm包库中被其它库依赖最多的库。 就像jQuery在全部函数前加全局的$一样,lodash使用全局的_来提供对工具的快速访问。var _ = require('lodash');提高开发者效率//copy一个JS对象//原生方法var a =

2016-07-18 19:46:02 4804

原创 JavaScript中函数式编程的体现--map和reduce

这两个函数都在某种程度上体现了函数式编程的思想,即将函数作为传入另一个函数的参数。map()方法的调用者一般是个数组,参数是一个函数,称为callback,返回值是一个由原数组中每个元素执行给定callback函数的返回值组成的新数组。也就是说,当你用map()方法时,是将组成数组中的每个元素作为参数

2016-07-08 13:09:08 2829

原创 [leetcode] Sum of Two Integers--用位运算实现加法运算

问题:Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.Example:Given a = 1 and b = 2, return 3.分析:这里要求我们不能用加法、减法等运算符来实现加法运算。这里应该使用位运算来实现加法运算,实际上,这也是计算机CPU内部实

2016-07-06 21:13:22 6773

原创 VIM不正常退出产生的swp文件

当你非正常关闭vim编辑器时(比如直接关闭终端或者电脑断电),会生成一个.swp文件,这个文件是一个临时交换文件,用来备份缓冲区中的内容。需要注意的是如果你并没有对文件进行修改,而只是读取文件,是不会产生.swp文件的。意外退出时,并不会覆盖旧的交换文件,而是会重新生成新的交换文件。而原来的文件中并不会有这次的修改,文件内容还是和打开时一样。例如,第一次产生的交换文件名为“.file.txt.swp

2016-07-05 13:32:09 33051 1

原创 Numpy库进阶教程(二)

第一篇在这里:Numpy库进阶教程(一)求解线性方程组求解特征值和特征向量关于特征值和特征向量的介绍,可以点击这里 首先创建一个矩阵In [1]: A=mat("3 -2;1 0")In [2]: AOut[2]: matrix([[ 3, -2], [ 1, 0]])在numpy.linalg模块中,eigvals函数可以计算矩阵的特征值,而eig函数可以返回一个包含特征值

2016-04-04 19:37:24 3435

原创 Numpy库进阶教程(一)求解线性方程组

前言Numpy是一个非常强大的python科学计算库,为了机器学习的需要,想深入研究一下Numpy库的用法,用这个系列的博客,记录下我的学习过程。 系列: Numpy库进阶教程(二) 正在持续更新计算逆矩阵numpy.linalg模块包含线性代数的函数,可以用来求矩阵的逆,求解线性方程组、求特征值及求解行列式。 mat函数可以用来构造一个矩阵,传进去一个专用字符串,矩阵的行与行之间用分号隔开

2016-03-28 11:08:02 19319

原创 python得到所有在leetcode上Accepted的代码(一)

得到cookies要得到所有提交成功的代码,必须先登录你的账号,得到你的cookies,这点我已经在先前的博文python 模拟登陆leetcode中详细讲述了。 url = "https://leetcode.com/submissions/" res = s.get(url=url,headers=headers_base,cookies=login()) c

2016-03-27 09:38:58 3168

原创 [leetcode] Pow(x, n)

题目:Implement pow(x, n).分析: 题目很短,就是实现pow求幂函数,直觉告诉我,这个题目的主要要求是降低程序的时间复杂度,果不其然,提交了一份带有while循环复杂度是O(n)的代码,返回“Time Limit Exceed“的错误,初次提交代码:class Solution {public: double myPow(double x, int n) {

2016-03-23 19:41:17 1606

原创 [leetcode]Path Sum II

Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.For example:Given the below binary tree and sum = 22, 5 / \

2016-03-22 19:41:51 1251

原创 [leetcode]Path Sum II

Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.For example:Given the below binary tree and sum = 22, 5 / \

2016-03-22 16:14:21 835

原创 [leetcode]Minimum Depth of Binary Tree--二叉树层序遍历的应用

题目:Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.分析: 要得出二叉树中所有从根到叶子节点路径中,经过结点最少路径上的节点数。

2016-03-16 18:16:46 1172

原创 [leetcode]Path Sum--巧用递归

题目:Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.For example:Given the below binary tree and sum =

2016-03-14 13:50:54 1607

原创 [leetcode] Symmetric Tree--二叉树遍历的应用

题目:Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).For example, this binary tree is symmetric: 1 / \ 2 2 / \ / \3 4 4 3But the following is

2016-03-12 23:13:55 1289

原创 实现浮点数的四舍五入RoundOff,保留几位小数

直接上代码,很简短double myRound(double d,int n){ d = d*pow(10,n); d += 0.5; d = (long)d; d = d/pow(10,n); return d;}上述代码中的d是我们要进行四舍五入的浮点数,n是我们要保留的小数点后位数。 四舍五入,主要靠这两行代码实现 d +

2016-01-29 10:22:56 4514

原创 向android studio中导入带有jni的eclipse项目

引入之前一直是用eclipse做android开发,相对于Google力推的android studio来说,eclipse不仅是个吃内存大户,而且android studio的界面更人性化,除此之外,eclipse对于高分屏并不支持,在笔者的Macbook pro上显得很是粗糙。所以决定把之前在正在eclipse上开发的一个使用NDK开发的android项目转移到android studio上。整

2016-01-28 15:39:09 6157 4

原创 巧用递归求字符串的子集

集合中的所有元素对于每一个子集来说,都有两种可能性:在子集中或是不在子集中。各个元素的这两种可能性组合起来,组成了一个集合的所有子集。这也是每一个集合都有2^n个子集的原因所在。比如 char *str = "abcd";对于str这个单词集合,其一个子集 空集,就是所有元素都不在该子集中,再如”abc”,这个子集,是元素a,b,c在子集中,元素d不在子集中。我们把元素这种在或不在子集

2016-01-25 18:04:09 3819 1

原创 leetcode Binary Tree Paths

题目:Given a binary tree, return all root-to-leaf paths.For example, given the following binary tree: 1 / \2 3 \ 5All root-to-leaf paths are:["1->2->5", "1->3"]分析:让你对一棵树进行遍历,找出所有从跟节点到到叶子节点的

2015-12-11 21:01:55 1083

安卓飞机大战

安卓飞机大战源码,高仿微信飞机大战界面,

2015-04-23

Linux学习资料

Linux学习资料,一个初学者写的,比较简易懂,可能有点乱

2014-12-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除