外贸网站设计模板/英文关键词seo
文章目录
- 16 粒子滤波
- 16.1 背景介绍
- 16.1.1 Particle Filter是什么?
- 16.1.2 Patricle Filter的状态如何转移?
- 16.1.3 如何通过采样求解Particle Filter
- 16.2 重要性采样
- 16.2.1 重要性采样方法
- 16.2.2 Sequential Importance Sampling
- 16.2.3 Resampling
- 16.2.4 采样总结——Basic Particle Filter
- 16.3 具体算法——SIR Filter
16 粒子滤波
16.1 背景介绍
16.1.1 Particle Filter是什么?
Dynamic Model包含:
- HMM——关注Decoding问题
- Linear Dynamic System——关注Filtering问题
- Patricle Filter——Nan-Linear,Nan-Gauss,关注Filtering问题
16.1.2 Patricle Filter的状态如何转移?
在HMM中有 λ = ( π , A , B ) \lambda = (\pi, A, B) λ=(π,A,B),用于表示状态转移矩阵和发射矩阵。
由于Linear Dynamic System和Particle Filter中的隐变量与观测变量连续,状态转移矩阵和发射矩阵不用矩阵A、B表示,表示为:
Z t = g ( Z t − 1 , u , ε ) ↦ A X t = h ( Z t , u , δ ) ↦ B \begin{align} Z_t & = g(Z_{t-1}, u, \varepsilon) \mapsto A \\ X_t & = h(Z_t, u, \delta) \mapsto B \end{align} ZtXt=g(Zt−1,u,ε)↦A=h(Zt,u,δ)↦B
在Kalman Filter中我们假设以上两个公式均为线性,且噪声为Gauss。表示为:
Z t = A ⋅ Z t − 1 + B + ε ε ∽ N ( 0 , Q ) X t = C ⋅ Z t + D + δ δ ∽ N ( 0 , R ) \begin{align} Z_t & = A \cdot Z_{t-1} + B + \varepsilon & \varepsilon \backsim N(0, Q) \\ X_t & = C \cdot Z_t + D + \delta & \delta \backsim N(0, R) \end{align} ZtXt=A⋅Zt−1+B+ε=C⋅Zt+D+δε∽N(0,Q)δ∽N(0,R)
回顾:Kalman Filter通过预测+更新的方式求解Filtering问题
Step1: 求解Prediction问题
P ( Z t ∣ x 1 , … , x t − 1 ) = ∫ Z t − 1 P ( Z t ∣ Z t − 1 ) ⋅ P ( Z t − 1 ∣ x 1 , … , x t − 1 ) d Z t − 1 P(Z_{t} | x_1, \dots, x_{t-1}) = \int_{Z_{t-1}} P(Z_t | Z_{t-1}) \cdot P(Z_{t-1} | x_1, \dots, x_{t-1}) {\rm d}_{Z_{t-1}} P(Zt∣x1,…,xt−1)=∫Zt−1P(Zt∣Zt−1)⋅P(Zt−1∣x1,…,xt−1)dZt−1
Step2: 求解update问题
P ( Z t ∣ x 1 , … , x t ) ∝ P ( X t ∣ Z t ) ⋅ P ( Z t ∣ x 1 , … , x t − 1 ) P(Z_{t} | x_1, \dots, x_t) \propto P(X_t | Z_t) \cdot P(Z_t | x_1, \dots, x_{t-1}) P(Zt∣x1,…,xt)∝P(Xt∣Zt)⋅P(Zt∣x1,…,xt−1)
具体可以通过条件概率相互求解的公式求解。
而在Particle Filter中转移方程非线形非高斯,只能通过采样的方式求解。
16.1.3 如何通过采样求解Particle Filter
由于转移方程非线性非高斯,所以只能采取近似方法求解Filtering问题。这里使用Monte Carlo Method,通过采样求取期望:
P ( Z ∣ X ) → E Z ∣ X [ f ( z ) ] = ∫ Z f ( z ) ⋅ P ( Z ∣ X ) d Z ≈ 1 N ∑ i = 1 N f ( Z ( i ) ) P(Z|X) \rightarrow E_{Z|X}[f(z)] = \int_Z {f(z) \cdot P(Z|X)} {\rm d}Z \approx \frac{1}{N} \sum_{i=1}^N f(Z^{(i)}) P(Z∣X)→EZ∣X[f(z)]=∫Zf(z)⋅P(Z∣X)dZ≈N1i=1∑Nf(Z(i))
其中 Z ( i ) Z^{(i)} Z(i)为样本,且 Z ( 1 ) , Z ( 2 ) , … , Z ( N ) ∽ P ( Z ∣ X ) Z^{(1)}, Z^{(2)}, \dots, Z^{(N)} \backsim P(Z|X) Z(1),Z(2),…,Z(N)∽P(Z∣X)。
16.2 重要性采样
16.2.1 重要性采样方法
已知问题:
E [ f ( Z ) ] = ∫ f ( Z ) p ( Z ) d Z E[f(Z)] = \int f(Z) p(Z) {\rm d}Z E[f(Z)]=∫f(Z)p(Z)dZ
求解方法:
-
但 p ( Z ) p(Z) p(Z)的分布复杂,无法直接采样,所以我们引入已知分布 q ( Z ) q(Z) q(Z), q ( Z ) q(Z) q(Z)也称为提议分布(Proposed dist):
E [ f ( Z ) ] = ∫ f ( Z ) p ( Z ) d Z = ∫ f ( Z ) ⋅ p ( Z ) q ( Z ) ⋅ q ( Z ) d Z = 1 N ∑ i = 1 N f ( Z ( i ) ) ⋅ p ( Z ) q ( Z ) \begin{align} E[f(Z)] & = \int f(Z) p(Z) {\rm d}Z \\ & = \int f(Z) \cdot \frac{p(Z)}{q(Z)} \cdot q(Z) {\rm d}Z\\ & = \frac{1}{N} \sum_{i=1}^{N} f(Z^{(i)}) \cdot \frac{p(Z)}{q(Z)} \end{align} E[f(Z)]=∫f(Z)p(Z)dZ=∫f(Z)⋅q(Z)p(Z)⋅q(Z)dZ=N1i=1∑Nf(Z(i))⋅q(Z)p(Z) -
其中 p ( Z ) q ( Z ) \frac{p(Z)}{q(Z)} q(Z)p(Z)被称为weight,表示为 w ( i ) w^{(i)} w(i),用于表示提议分布与实际分布之间的相似度:
E [ f ( Z ) ] = 1 N ∑ i = 1 N f ( Z ( i ) ) ⋅ w ( i ) E[f(Z)] = \frac{1}{N} \sum_{i=1}^{N} f(Z^{(i)}) \cdot w^{(i)} E[f(Z)]=N1i=1∑Nf(Z(i))⋅w(i)
所以我们通过采样可以求出 f ( Z ( i ) ) f(Z^{(i)}) f(Z(i)),然后我们的目标就是求出对应的 w ( i ) w^{(i)} w(i)。
16.2.2 Sequential Importance Sampling
引入SIS的原因:
- 由于Filtering问题在递推过程中求解的是 P ( Z t ∣ X 1 : t ) P(Z_t | X_{1:t}) P(Zt∣X1:t),所以对应就会有 w t ( i ) = P ( Z t ∣ X 1 : t ) q ( Z t ( i ) ∣ X 1 : t ) w_t^{(i)} = \frac{P(Z_t | X_{1:t})}{q(Z_t^{(i)} | X_{1:t})} wt(i)=q(Zt(i)∣X1:t)P(Zt∣X1:t),但是随着 t t t增加,每次 w w w都要求 N N N遍,时间开销大。所以引入Sequential Importance Sampling,通过递推的方式求解 w w w( w t − 1 ( i ) → w t ( i ) w_{t-1}^{(i)} \rightarrow w_t^{(i)} wt−1(i)→wt(i))。
推导过程:
-
已知:
w t ( i ) ∝ P ( Z 1 : t ∣ X 1 : t ) q ( Z 1 : t ∣ X 1 : t ) w_t^{(i)} \propto \frac{P(Z_{1:t} | X_{1:t})}{q(Z_{1:t} | X_{1:t})} wt(i)∝q(Z1:t∣X1:t)P(Z1:t∣X1:t) -
分解 P ( Z 1 : t ∣ X 1 : t ) P(Z_{1:t} | X_{1:t}) P(Z1:t∣X1:t),其中将已知量(只由观测变量构成的数据)假设为常数:
P ( Z 1 : t ∣ X 1 : t ) = P ( Z 1 : t , X 1 : t ) P ( X 1 : t ) = 1 C ⋅ P ( X t ∣ Z 1 : t , X 1 : t − 1 ) ⋅ P ( Z t , X 1 : t − 1 ) = 1 C ⋅ P ( X t ∣ Z t ) ⋅ P ( Z t ∣ Z 1 : t − 1 , X 1 : t − 1 ) ⋅ P ( Z 1 : t − 1 , X 1 : t − 1 ) = 1 C ⋅ P ( X t ∣ Z t ) ⋅ P ( Z t ∣ Z t − 1 ) ⋅ P ( Z 1 : t − 1 , X 1 : t − 1 ) = 1 C ⋅ P ( X t ∣ Z t ) ⋅ P ( Z t ∣ Z t − 1 ) ⋅ P ( Z 1 : t − 1 ∣ X 1 : t − 1 ) ⋅ P ( X 1 : t − 1 ) = D C ⋅ P ( X t ∣ Z t ) ⋅ P ( Z t ∣ Z t − 1 ) ⋅ P ( Z 1 : t − 1 ∣ X 1 : t − 1 ) \begin{align} P(Z_{1:t} | X_{1:t}) & = \frac{P(Z_{1:t}, X_{1:t})}{P(X_{1:t})} \\ & = \frac{1}{C} \cdot P(X_t | Z_{1:t}, X_{1:t-1}) \cdot P(Z_t, X_{1:t-1}) \\ & = \frac{1}{C} \cdot P(X_t | Z_{t}) \cdot P(Z_t| Z_{1:t-1}, X_{1:t-1}) \cdot P(Z_{1:t-1}, X_{1:t-1}) \\ & = \frac{1}{C} \cdot P(X_t | Z_{t}) \cdot P(Z_t| Z_{t-1}) \cdot P(Z_{1:t-1}, X_{1:t-1}) \\ & = \frac{1}{C} \cdot P(X_t | Z_{t}) \cdot P(Z_t| Z_{t-1}) \cdot P(Z_{1:t-1}| X_{1:t-1}) \cdot P(X_{1:t-1}) \\ & = \frac{D}{C} \cdot P(X_t | Z_{t}) \cdot P(Z_t| Z_{t-1}) \cdot P(Z_{1:t-1}| X_{1:t-1}) \end{align} P(Z1:t∣X1:t)=P(X1:t)P(Z1:t,X1:t)=C1⋅P(Xt∣Z1:t,X1:t−1)⋅P(Zt,X1:t−1)=C1⋅P(Xt∣Zt)⋅P(Zt∣Z1:t−1,X1:t−1)⋅P(Z1:t−1,X1:t−1)=C1⋅P(Xt∣Zt)⋅P(Zt∣Zt−1)⋅P(Z1:t−1,X1:t−1)=C1⋅P(Xt∣Zt)⋅P(Zt∣Zt−1)⋅P(Z1:t−1∣X1:t−1)⋅P(X1:t−1)=CD⋅P(Xt∣Zt)⋅P(Zt∣Zt−1)⋅P(Z1:t−1∣X1:t−1)
通过以上推导可将 P ( Z 1 : t ∣ X 1 : t ) P(Z_{1:t} | X_{1:t}) P(Z1:t∣X1:t)分解为由 P ( Z 1 : t − 1 ∣ X 1 : t − 1 ) P(Z_{1:t-1}| X_{1:t-1}) P(Z1:t−1∣X1:t−1)组成的公式 -
分解 q ( Z 1 : t ∣ X 1 : t ) q(Z_{1:t} | X_{1:t}) q(Z1:t∣X1:t):
q ( Z 1 : t ∣ X 1 : t ) = q ( Z t ∣ Z 1 : t − 1 , X 1 : t ) ⋅ q ( Z 1 : t − 1 ∣ X 1 : t ) = q ( Z t ∣ Z 1 : t − 1 , X 1 : t ) ⋅ q ( Z 1 : t − 1 ∣ X 1 : t − 1 ) \begin{align} q(Z_{1:t} | X_{1:t}) & = q(Z_t | Z_{1:t-1}, X_{1:t}) \cdot q(Z_{1:t-1}| X_{1:t}) \\ & = q(Z_t | Z_{1:t-1}, X_{1:t}) \cdot q(Z_{1:t-1}| X_{1:t-1}) \end{align} q(Z1:t∣X1:t)=q(Zt∣Z1:t−1,X1:t)⋅q(Z1:t−1∣X1:t)=q(Zt∣Z1:t−1,X1:t)⋅q(Z1:t−1∣X1:t−1) -
结合起来就是:
w t ( i ) ∝ P ( Z 1 : t ∣ X 1 : t ) q ( Z 1 : t ∣ X 1 : t ) ∝ P ( X t ∣ Z t ) ⋅ P ( Z t ∣ Z t − 1 ) ⋅ P ( Z 1 : t − 1 ∣ X 1 : t − 1 ) q ( Z t ∣ Z 1 : t − 1 , X 1 : t ) ⋅ q ( Z 1 : t − 1 ∣ X 1 : t − 1 ) ∝ P ( X t ∣ Z t ) ⋅ P ( Z t ∣ Z t − 1 ) q ( Z t ∣ Z 1 : t − 1 , X 1 : t ) ⋅ w t − 1 ( i ) ∝ P ( X t ∣ Z t ) ⋅ P ( Z t ∣ Z t − 1 ) q ( Z t ∣ Z t − 1 , X 1 : t ) ⋅ w t − 1 ( i ) \begin{align} w_t^{(i)} & \propto \frac{P(Z_{1:t} | X_{1:t})}{q(Z_{1:t} | X_{1:t})} \\ & \propto \frac{P(X_t | Z_{t}) \cdot P(Z_t| Z_{t-1}) \cdot P(Z_{1:t-1}| X_{1:t-1})}{q(Z_t | Z_{1:t-1}, X_{1:t}) \cdot q(Z_{1:t-1}| X_{1:t-1})} \\ & \propto \frac{P(X_t | Z_{t}) \cdot P(Z_t| Z_{t-1})}{q(Z_t | Z_{1:t-1}, X_{1:t})} \cdot w_{t-1}^{(i)} \\ & \propto \frac{P(X_t | Z_{t}) \cdot P(Z_t| Z_{t-1})}{q(Z_t | Z_{t-1}, X_{1:t})} \cdot w_{t-1}^{(i)} \end{align} wt(i)∝q(Z1:t∣X1:t)P(Z1:t∣X1:t)∝q(Zt∣Z1:t−1,X1:t)⋅q(Z1:t−1∣X1:t−1)P(Xt∣Zt)⋅P(Zt∣Zt−1)⋅P(Z1:t−1∣X1:t−1)∝q(Zt∣Z1:t−1,X1:t)P(Xt∣Zt)⋅P(Zt∣Zt−1)⋅wt−1(i)∝q(Zt∣Zt−1,X1:t)P(Xt∣Zt)⋅P(Zt∣Zt−1)⋅wt−1(i)
具体可以表示为一个算法:
条件:t-1时刻的采样已完成 → w t − 1 ( i ) \rightarrow w_{t-1}^{(i)} →wt−1(i)已知。
t时刻:
for i = 1 to N:
Z t ( i ) ∽ q ( Z t ∣ Z t − 1 , X 1 : t ) Z_t^{(i)} \backsim q(Z_t | Z_{t-1}, X_{1:t}) Zt(i)∽q(Zt∣Zt−1,X1:t) // 采样
w t ( i ) ∝ P ( X t ∣ Z t ) ⋅ P ( Z t ∣ Z t − 1 ) q ( Z t ∣ Z t − 1 , X 1 : t ) ⋅ w t − 1 ( i ) w_t^{(i)} \propto \frac{P(X_t | Z_{t}) \cdot P(Z_t| Z_{t-1})}{q(Z_t | Z_{t-1}, X_{1:t})} \cdot w_{t-1}^{(i)} wt(i)∝q(Zt∣Zt−1,X1:t)P(Xt∣Zt)⋅P(Zt∣Zt−1)⋅wt−1(i) // 计算
endw t ( i ) w_t^{(i)} wt(i)要归一化, ∑ i = 1 N w t ( i ) \sum_{i=1}^{N} w_t^{(i)} ∑i=1Nwt(i)
但是通过SIS直接求解有一个问题: w t ( i ) w_t^{(i)} wt(i)的权值会退化——有的大有的小,随着维度上升,可能会出现如: w t ( 1 ) → 1 w_t^{(1)} \rightarrow 1 wt(1)→1但 w t ( N ) → 0 w_t^{(N)} \rightarrow 0 wt(N)→0的情况。解决方案有:
- Resampling——重采样(通过别的方法重新采样)
- 选择一个合适的proposed dist q(Z)
16.2.3 Resampling
这里介绍一种最简单的重采样方法。
倘若第一遍的采样结果为第二列:
数据编号 | 权重(weight) | cdf | |
---|---|---|---|
x ( 1 ) x^{(1)} x(1) | 0.1 | 0.1 | 0.1 |
x ( 2 ) x^{(2)} x(2) | 0.1 | 0.1 | 0.2 |
x ( 3 ) x^{(3)} x(3) | 0.8 | 0.8 | 1 |
我们将权重假设为当前数据的概率,通过权重建立概率密度函数,并求出其分布函数,即可通过分段函数进行采样。
这样的优点是可以将数据集中在权重大的地方。
16.2.4 采样总结——Basic Particle Filter
结合:重要性采样方法+SIS+Resampling,就是简单的粒子滤波求解方案:Basic Particle Filter
16.3 具体算法——SIR Filter
Particle Filter整体就是通过每个时刻的采样与迭代地计算权重,通过Monte Carlo方法预测的方法。
根据16.2.2已知迭代公式为:
w t ( i ) ∝ P ( X t ∣ Z t ) ⋅ P ( Z t ∣ Z t − 1 ) q ( Z t ∣ Z t − 1 , X 1 : t ) ⋅ w t − 1 ( i ) w_t^{(i)} \propto \frac{P(X_t | Z_{t}) \cdot P(Z_t| Z_{t-1})}{q(Z_t | Z_{t-1}, X_{1:t})} \cdot w_{t-1}^{(i)} wt(i)∝q(Zt∣Zt−1,X1:t)P(Xt∣Zt)⋅P(Zt∣Zt−1)⋅wt−1(i)
其中我们令 q ( Z t ∣ Z t − 1 , X 1 : t ) q(Z_t | Z_{t-1}, X_{1:t}) q(Zt∣Zt−1,X1:t)为用于采样的分布,我们假设采样的分布就是状态转移函数:
q ( Z t ∣ Z t − 1 , X 1 : t ) = p ( Z t ∣ Z t − 1 ( i ) ) q(Z_t | Z_{t-1}, X_{1:t}) = p(Z_t | Z_{t-1}^{(i)}) q(Zt∣Zt−1,X1:t)=p(Zt∣Zt−1(i))
可以简化计算,算法可以总结为"generate and test":
-
generate表示采样:采样的方式变成了:
Z t ( i ) ∽ q ( Z t ∣ Z t − 1 , X 1 : t ) ⟹ Z t ( i ) ∽ p ( Z t ∣ Z t − 1 ( i ) ) Z_t^{(i)} \backsim q(Z_t | Z_{t-1}, X_{1:t}) \implies Z_t^{(i)} \backsim p(Z_t | Z_{t-1}^{(i)}) Zt(i)∽q(Zt∣Zt−1,X1:t)⟹Zt(i)∽p(Zt∣Zt−1(i)) -
test表示通过权重的迭代计算进行预测:变成了:
w t ( i ) ∝ P ( X t ∣ Z t ( i ) ) ⋅ w t − 1 ( i ) w_t^{(i)} \propto P(X_t | Z_{t}^{(i)}) \cdot w_{t-1}^{(i)} wt(i)∝P(Xt∣Zt(i))⋅wt−1(i)
上面的方法总结下来就是:SIR Filter(Sampling-Importance-Resampling)——SIS + Resampling + ( q ( Z t ∣ Z t − 1 , X 1 : t ) = p ( Z t ∣ Z t − 1 ( i ) ) q(Z_t | Z_{t-1}, X_{1:t}) = p(Z_t | Z_{t-1}^{(i)}) q(Zt∣Zt−1,X1:t)=p(Zt∣Zt−1(i)))
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
16 粒子滤波
文章目录 16 粒子滤波16.1 背景介绍16.1.1 Particle Filter是什么?16.1.2 Patricle Filter的状态如何转移?16.1.3 如何通过采样求解Particle Filter 16.2 重要性采样16.2.1 重要性采样方法16.2.2 Sequential Importance Sampling16.2.3 Resampling16.2.4…...
![](https://img-blog.csdnimg.cn/2020101614454079.png#pic_center)
【appium】appium自动化入门之API(下)——两万字API长文,建议收藏
目录 Appium API 前言 1.contexts (返回当前会话中的上下文,使用后可以识别 H5 页面的控件) 2.current_context (返回当前会话的当前上下文 ) 3. context (返回当前会话的当前上下文) 4.find_e…...
![](https://img-blog.csdnimg.cn/2fa791628b6f4fc59d67e9b95431d9cf.png)
开发改了接口,经常忘通知测试的解决方案!
目录 前言: Apifox解决方案 Apifox对此给出的解决方案是: 用Apifox怎么处理接口变更 接口代码实现逻辑修改 接口参数修改 前言: 在开发过程中,接口变动十分频繁,测试人员没有及时获得相关通知的情况也很普遍。这…...
![](https://img-blog.csdnimg.cn/b806ad7c5a6d4daba720d4ce42313883.png)
Beyond Compare 4 无法打开
解决办法: 1.修改注册表。WINR呼出开始菜单,在搜索栏中输入 regedit,点击确定。 2.删除项目:\HKEY_CURRENT_USER\Software\ScooterSoftware\Beyond Compare 4\CacheId 根据这个路径找到cacheid 右击删除掉就可以...
![](https://www.ngui.cc/images/no-images.jpg)
MySQL高级数据操作
✅作者简介:热爱Java后端开发的一名学习者,大家可以跟我一起讨论各种问题喔。 🍎个人主页:Hhzzy99 🍊个人信条:坚持就是胜利! 💞当前专栏:MySQL 🥭本文内容&a…...
![](https://img-blog.csdnimg.cn/59b61d5bbad54618bf254134e38f0b61.png)
硬件设计电源系列文章-DCDC转换器基础知识
文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示:这里可以添加技术概要 本文主要接着上篇,上篇文章主要讲述了LDO的相关基础知识,本节开始分享DCDC基础知识 整体架构流程 提示:这里可以添加技术整体架构 以下是…...
![](https://img-blog.csdnimg.cn/55c4373abb8f48e1a0baffa681511e90.png)
XdsObjects .NET 8.45.1001.0 Crack
XdsObjects 是一个工具包,允许开发人员使用 IHE XDS 和 XDS-I 配置文件开发应用程序,只需花费最少的时间和精力,因为遵守配置文件和 ebXML 规则的所有艰苦工作都由该工具包处理。 它为所有角色提供客户端和服务器支持,包括&#…...
![](https://img-blog.csdnimg.cn/d915ee5cc0464d24834671bcb545f311.png)
数据安全--17--数据安全管理之数据传输
本博客地址:https://security.blog.csdn.net/article/details/131061729 一、数据传输概述 数据传输有两个主体,一个是数据发送方,另一个是数据接收方。数据在通过不可信或者较低安全性的网络进行传输时,容易发生数据被窃取、伪…...
![](https://img-blog.csdnimg.cn/85692619fa87455a8d3b499db45a6988.gif)
SpringSecurity实现前后端分离登录token认证详解
目录 1. SpringSecurity概述 1.1 权限框架 1.1.1 Apache Shiro 1.1.2 SpringSecurity 1.1.3 权限框架的选择 1.2 授权和认证 1.3 SpringSecurity的功能 2.SpringSecurity 实战 2.1 引入SpringSecurity 2.2 认证 2.2.1 登录校验流程 2.2.2 SpringSecurity完整流程 2.2.…...
![](https://img-blog.csdnimg.cn/846f31e2c9ca4a11a6d9c3812caae5c8.png#pic_center)
Vue3_ElementPlus_简单增删改查(2023)
Vue3,Element Plus简单增删改查 代码:https://github.com/xiaoming12318/Vue3_ElementPlus_CRUD.git 环境: Visual Studio Code Node.js 16.0或更高版本,https://nodejs.org/en axios 快速上手: 如果已经有16.0及…...
![](https://img-blog.csdnimg.cn/5431a9ea894e44c5be4d2b662f1322f3.png)
vue中重写并自定义console.log
0. 背景 在vue2项目中自定义console.log并输出文件名及行、列号 1. 实现 1.1 自定义console.log export default {// 输出等级: 0-no, 1-error, 2-warning, 3-info, 4-debug, 5-loglevel: 5,// 输出模式: 0-default, 1-normal, 2-randommode: 1,// 是否输出图标hasIcon: fal…...
![](https://img-blog.csdnimg.cn/eaadde941dcf4fe39d75a83efa9f66fd.png)
基于OpenCV 和 Dlib 进行头部姿态估计
写在前面 工作中遇到,简单整理博文内容涉及基于 OpenCV 和 Dlib头部姿态评估的简单Demo理解不足小伙伴帮忙指正 庐山烟雨浙江潮,未到千般恨不消。到得还来别无事,庐山烟雨浙江潮。 ----《庐山烟雨浙江潮》苏轼 https://github.com/LIRUILONGS…...
![](https://img-blog.csdnimg.cn/img_convert/51db275b422966dec8dad70b5df4f008.jpeg)
24个Jvm面试题总结及答案
1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。 Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每…...
![](https://www.ngui.cc/images/no-images.jpg)
freemarker 生成前端文件
Freemarker是一种模板引擎,它允许我们在Java应用程序中分离视图和业务逻辑。在Freemarker中,List是一种非常有用的数据结构,它允许我们存储一组有序的元素。有时候,我们需要判断一个List是否为空,这在程序设计中有许多…...
![](https://img-blog.csdnimg.cn/a3b871f5c9ce4e03b063babfb9ac83a3.webp)
Pycharm+pytest+allure打造高逼格的测试报告
目录 前言: 1、安装allure 2、安装allure-pytest 3、一个简单的用例test_simpe.py 4、在pycharm底部打开terminal 5、用allure美化报告 6、查看报告 总结: 前言: 今天分享的内容:在Pycharmpytest基础上使用allure打造高逼格…...
![](https://img-blog.csdnimg.cn/8d394f50d1414376bd83f69796a23c94.png?x-ossprocess=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NjEwMTgzOQ==,size_16,color_FFFFFF,t_70)
Mybatis-Plus中update更新操作用法
目录 一、前言二、update1、关于修改的4个条件构造器2、UpdateWrapper【用法示例】3、LambdaUpdateWrapper【用法示例】4、UpdateChainWrapper【 用法示例】5、LambdaUpdateChainWrapper【 用法示例】6、updateById 和 updateBatchById7、Mybatis-plus设置某个字段值为null的方…...
![](https://www.ngui.cc/images/no-images.jpg)
16道JVM面试题
1.jvm内存布局 1.程序计数器:当前线程正在执行的字节码的行号指示器,线程私有,唯一一个没有规定任何内存溢出错误的情况的区域。 2.Java虚拟机栈:线程私有,描述Java方法执行的内存模型,每个方法运行时都会…...
![](https://img-blog.csdnimg.cn/img_convert/a818b2384efbe25289ed17dc5c38bc27.jpeg)
HttpRunner 接口自动化测试框架实战,打造高效测试流程
简介 2018年python开发者大会上,了解到HttpRuuner开源自动化测试框架,采用YAML/JSON格式管理用例,能录制和转换生成用例功能,充分做到用例与测试代码分离,相比excel维护测试场景数据更加简洁。在此,利用业…...
![](https://img-blog.csdnimg.cn/img_convert/6b592660c72b132348e3dc12d3fb5c84.png)
手写一个webpack插件(plugin)
熟悉 vue 和 react 的小伙伴们都知道,在执行过程中会有各种生命周期钩子,其实webpack也不例外,在使用webpack的时候,我们有时候需要在 webpack 构建流程中引入自定义的行为,这个时候就可以在 hooks 钩子中添加自己的方…...
![](https://www.ngui.cc/images/no-images.jpg)
jvm常见面试题
0x01. 内存模型以及分区,需要详细到每个区放什么。 栈区: 栈分为java虚拟机栈和本地方法栈 重点是Java虚拟机栈,它是线程私有的,生命周期与线程相同。 每个方法执行都会创建一个栈帧,用于存放局部变量表࿰…...
![](https://www.ngui.cc/images/no-images.jpg)
TF-A 项目的长期支持介绍
引流关键词:Armv8-A, Armv9-A, Cortex-A, Cortex-A12, Cortex-A15, Cortex-A17, Cortex-A32, Cortex-A34, Cortex-A35, Cortex-A5, Cortex-A510, Cortex-A53, Cortex-A55, Cortex-A57, Cortex-A65, Cortex-A65AE, Cortex-A7, Cortex-A710, Cortex-A715, Cortex-A72, Cortex-A7…...
![](https://img-blog.csdnimg.cn/6faaefe555a245f6a0b4fa55df60d328.png)
企业电子招标采购系统源码java 版本 Spring Cloud + Spring Boot
项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及…...
![](https://www.ngui.cc/images/no-images.jpg)
7.Mysql 事务底层
一、事务的基础知识 mysql中的事务 分为 显式事务 和 隐式事务。 1.1 显式事务 显式事务就是我们手动开启事务,并且提交事务比如: -- 开启事务 begin; -- 执行查询语句 select *from where id = 1 for update ; -- 提交事务 commit;1.2 隐式事务 在 MySQL 中,隐式事务是…...
![](https://img-blog.csdnimg.cn/29843521e1314baf99fcad7cb21236e2.png)
15.DIY可视化-拖拽设计1天搞定主流小程序-分类联动文章列表实时刷新
分类联动文章列表实时刷新 本教程均在第一节中项目启动下操作 分类联动文章列表实时刷新前言需求一:功能实现:点击首页分类,对应分类内容显示到当前页一、清空原分类界面:二. 设置选项卡三:设定展示内容字段:1.跨页面复制:文章分类组件到分类![在这里插入图片描述](https://img…...
![](https://img-blog.csdnimg.cn/24553d7cc2884691ace882eaa3ca3128.png)
【SpringCloud】二、服务注册发现Eureka与负载均衡Ribbon
文章目录 一、Eureka1、服务提供者与消费者2、Eureka原理分析3、搭建Eureka4、服务注册5、模拟多服务实例启动6、服务的发现 二、Ribbon1、负载均衡的原理2、源码分析3、负载均衡策略4、饥饿加载 一、Eureka 1、服务提供者与消费者 服务提供者:一次业务中…...
![](https://img-blog.csdnimg.cn/ff69365187ac4f5e9f16c1da351acd56.png)
图形学实验(完整文件见上传)
CRect rect; this->GetClientRect(rect); pDC->Ellipse(rect); // DDALineView.cpp : implementation of the CDDALineView class // #include “stdafx.h” #include “DDALine.h” #include “DDALineDoc.h” #include “DDALineView.h” #ifdef _DEBUG #define new…...
![](https://img-blog.csdnimg.cn/665c602bdf164c818a0bef96f1c6ae07.png)
Spark大数据处理学习笔记(3.2.1)掌握RDD算子
该文章主要为完成实训任务,详细实现过程及结果见【http://t.csdn.cn/FArNP】 文章目录 一、准备工作1.1 准备文件1. 准备本地系统文件2. 把文件上传到 1.2 启动Spark Shell1. 启动HDFS服务2. 启动Spark服务3. 启动Spark Shell 二、掌握转换算子2.1 映射算子 - map()…...
![](https://www.ngui.cc/images/no-images.jpg)
lammps初级:石墨烯、金属材料、纳米流体、热传导、多成分体系、金属、半导体材料的辐照、自建分子力场、MOFS、H2/CO2混合气体等模拟
1 LAMMPS的基础入门——初识LAMMPS是什么?能干什么?怎么用? 1.1 LAMMPS在win10和ubuntu系统的安装及使用 1.2 in文件结构格式 1.3 in文件基本语法:结合实例,讲解in文件常用命令 1.4 data文件格式 1.5 LAMMPS常见错误解…...
![](https://www.ngui.cc/images/no-images.jpg)
【MarkerDown】CSDN Markdown之时序图sequenceDiagram详解
CSDN Markdown之时序图sequenceDiagram详解 序列图 sequenceDiagram参与者与组参与者 participant拟人符号 actor别名 as组 box 消息(连线)激活/失活 activate/deactivate备注 Note循环 loop备选 Alt并行 par临界区 critical中断 break背景高亮 rect注释 %%转义字符的实体代码序…...
![](https://img-blog.csdnimg.cn/img_convert/b421d953342541dfe112d1a081b130ba.png)
ReentrantLock实现原理-公平锁
在ReentrantLock实现原理(1)一节中,我们了解了ReentrantLock非公平锁的获取流程,在本节中我们来看下ReentrantLock公平锁的创建以及锁管理流程 创建ReentrantLock公平锁 创建公平锁代码如下: ReentrantLock reentrantLock new ReentrantL…...