![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 62
飞凡可期
Stop dreaming,start doing
展开
-
【矩阵运算】矩阵的迹以及迹对矩阵求导总结
矩阵求导最终都是华为标量求导,迹就是最简单的衡量标量 一定要掌握迹求导原因总结技巧迹求导原因矩阵求导最终都是华为标量求导,迹就是最简单的衡量标量 一定要掌握总结Tr(AB)=Tr(BA)Tr(AB) =Tr(BA)Tr(AB)=Tr(BA)Tr(ABC)=Tr(BCA)=Tr(CAB)Tr(ABC) = Tr(BCA) = Tr(CAB)Tr(ABC)=Tr(BCA)=Tr(CAB)Tr(A)=Tr(A′)Tr(A) = Tr(A')Tr(A)=Tr(A′)d(Tr(XB))=d(Tr(BX)原创 2022-03-24 17:40:06 · 3069 阅读 · 0 评论 -
musi算法使用简记
musicMUSIC是超分辨算法中最有工程使用价值的一种。原理很简洁明了,难点在工程应用。文章《Multiple Emitter Location and Signal Parameter Estimation》非常经典。公式就是那个经典的PMUSIC=1/(aH(θ)UNUNHa(θ))P_{MUSIC} = 1 / (a^H(\theta)U_N U_N^H a(\theta))PMUSIC=1/(aH(θ)UNUNHa(θ))其中a(θ)a(\theta)a(θ)是导向矢量, UNU_NU原创 2022-03-03 10:48:37 · 1127 阅读 · 0 评论 -
牛顿迭代的应用和关键 迭代提升算子精度
牛顿迭代提升算子精度原创 2022-03-01 17:25:37 · 448 阅读 · 0 评论 -
拉格朗日 优美典范
%syms: good lagrange 朗格朗日好样的; %两种方式1:x=x0, eval(f1); 2:使用{x,y},{x,y} subs替换函数,属性-值的花括号(元组对)即可;syms x1 x2 x3 x4 x x5 x6exp = (x-x2)*(x-x3)*(x-x4)/((x1-x2)*(x1-x3)*(x1-x4))f1 = subs(exp, {x,x1,x2,x3,x4},{0,-2,-1,1,2})f2 = subs(exp, {x,x1,x2,x3,x4},{0,-1,原创 2022-01-20 21:59:14 · 216 阅读 · 0 评论 -
Python sympy做代数运算、解Cholesky求逆的L和L逆矩阵示例
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章结构sympy包问题一、代码二、运行结果总结sympy包问题在1.6.x的包中发现用“from sympy import *"遇上频繁的Warning问题?解决方法:shell power >> pip install -U sympy 更新到了1.9系列,问题解决!提示:sympy不仅仅有symbol系列的代数运算功能,其Matrix系列的矩阵数值运算也比较方便,比如Matrix([[1,2],[3,4]])这原创 2021-10-22 12:11:48 · 942 阅读 · 0 评论 -
余弦相似性和相关
person相关首先的概念是相关性是衡量线性关系,而非“非线性”关系。如上图,二维平面点集合第一行可以发现是围绕直线的(x,y)点,比如(1,1.1) 和(1.1,1)几乎为1,反之最右侧的是(-1,1.1) (-1.1,1),在直观上,他们两队坐标是各自相关的,却是-1和1差距,在两个极端。但实际还是一回事儿,反应了两个变量x,y的"线性相关"程度。—同向增长,反向增长。 介于中间的0.8/0.4这些点则是弱线性相关,增长反向不总一致或反向。0处则是完全无规律。第二行,发现相关方向和斜率无关(线原创 2021-09-30 21:44:23 · 1751 阅读 · 0 评论 -
【硬件资源节约】技巧:利用复数乘模块实现共轭复数乘-不经过取反加1
复数乘简单实现共轭乘问题解决问题已经有一个复数乘模块 Cmultiply(A,B)=C,实现了复数乘法功能:A*B = (a+bj)(c+dj) = ac-bd + (bc+ad)j=C则基于此模块实现复数共轭乘法 A′∗B′HA'*B'^HA′∗B′H?(a+bj)∗(c−dj)=(ac+bd)+(bc−ad)j(a+bj)*(c-dj) = (ac+bd) + (bc-ad)j(a+bj)∗(c−dj)=(ac+bd)+(bc−ad)j要求,不用对B取共轭(因为取反加1,涉及2次硬件计算)是原创 2021-09-17 09:37:01 · 424 阅读 · 0 评论 -
WLAN的一个典型实现
规格时钟频率: 160MHz带宽: 10、20 或 40MHz10MHz 和 20MHz 带宽符合 802.1140MHz 实现为双时钟 20MHz,不符合 802.11 HT40 波形OFDM 格式: 64 个子载波,16 个样本循环前缀NONHT 波形 (11ag):48 个数据子载波,4 个导频音HTMF 波形 (11n):52 个数据子载波,4 个导频音帧格式:根据 802.11-2012 的第 18 和 20 节的规定:前导码(10 次重复 16 样本短训练符号,2.5 次重复原创 2021-07-03 12:03:28 · 331 阅读 · 0 评论 -
html的页面内超链接,为何跳不动
基本格式“点我跳到末尾”想要跳转的正文部分(内部链接锚点位置):<a id="chap1">正文中:内部链接锚点位置</a>索引目录部分(点击这里可以跳转到预设锚点):<a href="#chap1">目录中可以跳转的位置</a>坑点编程时候,一定要加上id = “” xxx” 上下索引标号"“点我调到末尾”...原创 2021-06-15 22:54:19 · 2975 阅读 · 0 评论 -
近似计算-简单举例 复数乘法和strassen算法
原因计算是第一生产力,节约计算等于提升了计算效率,自然就有巨大价值。尤其是AI、通信、并发这些耗计算大户下。方法以前从来没接触过,所以没法长篇大论,只举例我自己知道的2个。一维的复数计算(或者类似(a+b)*(c+d)这种多项式乘法),二维的矩阵计算一维复数计算,每4次乘法节约1次,提效25%原本计算(a+jb)(c+jd) = (ac -bd) + j(bc + ad), 4次乘法一目了然。节约计算:先算x= (a+b)(c-d) = (ac-bd)+bc-ad; 左侧只有1次乘法(加法耗计原创 2021-06-05 18:48:31 · 593 阅读 · 0 评论 -
Viterbi算法
简介和示例理解Viterbi算法是典型的动态规划算法,通过中间节点的优选来大为简化整体复杂度。关键点在于隐藏状态的判断。根据观察值,转移概率来推测真实状态(隐藏状态)。注意到中间的节点所有状态都是保留的,只在最后一个观察值来最终判断哪一条路径(那个序列)是最优的就是最终的答案。比如生病、健康状态,医生每天观察到的是正常、发烧、头晕这样症状,病人每天的健康、生病状态转移有一点概率(假设平稳不变),则由发烧-健康康复的过程中每个状态点(对应观察时刻点)就是隐藏状态。我们需要知道的是医生判断出的病人每个健康状原创 2021-03-26 14:33:53 · 620 阅读 · 0 评论 -
Python LeetCode 10正则表达式
第一版:p的2各字符一组匹配,分析.,x状况"""10. 正则表达式匹配给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例 1:输入:s = "aa" p = "a"输出:false解释:"a" 无法匹配 "aa" 整个字符串。示例 2:输入:s = "aa" p = "a*"输出:true解释:因为原创 2021-01-14 10:05:01 · 124 阅读 · 0 评论 -
Python高级操作第一弹:heapq的妙用
1 基础操作"""1)基础:入堆、出堆、替换操作;heapq.heappush(heapq, item)/heapq.heappop(heapq, item)/ .heappushpop(压入一个,弹出一个)/.heapreplace(先弹出堆顶,再压入元素,和heappushpop顺序相反) 初始化:创建堆用[]的列表,或者heapify()来将填充的列表转化为堆 操作:.merge(迭代对象,key,reverse)合并多个输入,.nlarget(n,迭代,key=non原创 2021-01-11 21:51:04 · 432 阅读 · 0 评论 -
Leetcode的第2题,持续改进算法到cleancode
这是非常典型的,同样是编代码完成一样的功能,基础也够,但是写出来的速度、容易度、可阅读性、简洁性差异极大。这得看天赋和经验,绝不是简单搬砖。这是历来强调clean code和代码质量的一个原因。方法上教训自己的就是多看、多读、编码前多构思,不要凭着冲劲儿蛮干。titile给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外原创 2021-01-11 15:03:24 · 135 阅读 · 0 评论 -
java的根加载器launcher.getBootstrapClassPath()运行报错,用命令行编译运行通过
codeimport java.net.URL;public class p0106bootstrapCL { public static void main(String[] args) { URL[] url = sun.misc.Launcher.getBootstrapClassPath().getURLs(); //sun.misc. for (URL value : url) { System.out.println(val原创 2021-01-06 19:35:49 · 1184 阅读 · 0 评论 -
java runable接口synchronized(this){}模块实现线程同步
/** 利用synchronize进行线程同步,访问稀缺资源,同一时刻只能一个线程访问关键资源,刷新资源状态;** task:10个人抢着通过1个山洞,每个人穿山洞耗时1s;* 1)打印出穿越山洞的人,并显示它是通过的次序,名称* */public class threadSync0105 {//通过runable接口重写来实现,synchronize(this)同步//new runable接口传递给10个新建的线程, runable overwrite public stati原创 2021-01-05 16:01:26 · 199 阅读 · 0 评论 -
java匿名线程Thread的三种方式:lambda,run重写,Runable接口和run重写
/** 匿名Thread几种方法:* 1) 重写run方法:通过new Thread(){}.start() 直接new一个实例后实现并start, 实现里面重写run方法* 2) 调用runable接口:new Thread( new Runable(){} ).start()* 3) 通过lambda传参给Thread: new Thread( () -> {}).start()** Task:* “yyyy-MM-dd HH:mm:ss”的格式打印当前系统时间,总循环10次,每1.原创 2021-01-05 15:34:01 · 2180 阅读 · 0 评论 -
AI那些事儿之验证集、shuffle作用
验证集干啥的?验证集合测试集哪个更重要?一句话:训练集用于“自动地”训练调整模型中网络参数(weights)、验证集用于调超参数(epochs轮数,几层比较合适,啥时候过拟合,要不要dropout,要多大程度)、测试集测试模型泛化能力;验证集和测试集都应当和训练集是同分布的数据,都不会进入网络中,直接训练网络模型(根BP或前向传播都没关系); 那么为啥有两个?为啥train-test两种模型更广为人知?实际上,验证集是AI炼丹士的自留地,每次跑完一轮,验证一下识别率,1)差异太大赶紧调过拟合 2)不收敛原创 2020-12-17 15:36:15 · 1936 阅读 · 1 评论 -
python数学画图之双曲函数系列
code:"""sinhx = (e^x - e^(-x)) /2cosh x = (e^x + e^(-x)) /2tanh x = sinh x/ cosh x = (e^x - e^(-x)) / (e^x + e^(-x))coth x = cosh x/ sinh x = (e^x + e^(-x)) / (e^x - e^(-x))sech x = 1/coshxcsc x = 1/sinhx"""import numpy as npimport matplotlib.py原创 2020-12-12 14:50:53 · 2272 阅读 · 1 评论 -
go牛刀小试之互斥锁 vs 状态协程
互斥锁/*目的:通过大并发读写同一个map变量,来展示go的大并发能力;实现:设定go map变量,互斥锁Mutex, 改100个读协程,10个写协程; atomic纪录读写总次数;方法:sync.Mutex{}, map [int] int ; */package mainimport ( "fmt" "math/rand" "sync" "sync/atomic" "time")func main() { var state = make(map [int] in原创 2020-11-14 19:06:03 · 95 阅读 · 0 评论 -
go牛刀小试之原子计数: 大并发的奇怪问题,最终读取的数早一点读和晚一点可能不一样
说明大量并发的操作有可能超出计算机的读写能力;所以最终完成后的,读取的操作未必是最终状态(最后一波数可能在CPU缓存里,没有刷到内存中)code/*目标:大量并发发生,如何安全修改状态;以原子计数器(原子钟?)为例;方法:var ato uint64; 大并发中,使用atomic.add修改,安全改变状态;回顾:sync.WaitGroup使用; 1 定义var wg wg; 2 wg.add() 3 routine:wg.done() 4 main: wg.wait() */packag原创 2020-11-10 18:01:49 · 221 阅读 · 0 评论 -
go牛刀小试之waitGroup等待协程完成(多组同步),速率控制
WaitGroup 完成所有协程/*目标:利用sync包中的waitGroup对象来 等待各个协程gorutine完成;方法:1) 定义变量sync.WatiGroup 2)传递给go routine,并每传递一次,waitgroup++, 3)go rutine内部设置延迟万层 defer wg.Done()函数4)主线程中wg.Wait()总结:设立外套Group 》给go routine刷计数器 》 内部设置延迟完成,返回才减数 》等待线程等;典型的set-wait模式在一个组应用(关键原创 2020-11-10 17:14:12 · 309 阅读 · 0 评论 -
python小试牛刀: K-best算法
"""k-best解决的问题:n个珠宝价值vi和重量wi;求保留k个珠宝的单位价值最大化n,vi,wi 值域。。。"""def k_best(v_ls,w_ls,k): l,r = 0.0, 1e5 #maximun 10,0000 while abs(r-l) > 1e-6: mid = (l + r)/2.0 vw_ls = [v - mid * w for v,w in zip(v_ls, w_ls)] choose原创 2020-11-04 11:30:32 · 3272 阅读 · 0 评论 -
python小试牛刀:多线程通过condition来同步
背景并发线程是为了效率,多个无关联子任务并发执行,加速明显。但是很多任务的开启是有逻辑依赖关系。比如A线程搬移完数据,BCD线程才能进一步处理数据。codefrom threading import Threadimport threadingimport time#创建一个period线程,周期性启动threading.condition() .wati()设置来设置一波时序;# 通过时序控制两个线程数数;class periodTick: def __init__(self,i原创 2020-10-26 20:28:28 · 145 阅读 · 0 评论