当前位置: 首页 > article >正文

什么是 Cholesky 分解?兼谈正定矩阵和二次型

Cholesky 分解在深度学习中的应用与理解

Cholesky 分解是一种用于对称正定矩阵的特殊分解方法,在线性代数和概率模型中有广泛应用。对于深度学习研究者来说,理解 Cholesky 分解不仅有助于掌握矩阵运算的理论基础,还能在高斯过程、变分方法(如 VAE 和扩散模型)以及优化算法中发挥重要作用。本文将详细介绍 Cholesky 分解的定义、计算方法及其在深度学习中的实际应用,结合示例和代码,帮助读者深入掌握这一工具。


什么是 Cholesky 分解?

Cholesky 分解是一种将对称正定矩阵分解为下三角矩阵与自身转置乘积的方法。设 ( Σ \Sigma Σ ) 是一个 ( d × d d \times d d×d ) 的对称正定矩阵(即 ( Σ = Σ T \Sigma = \Sigma^T Σ=ΣT ) 且对于任意非零向量 ( v v v ),( v T Σ v > 0 v^T \Sigma v > 0 vTΣv>0 )),Cholesky 分解表示为:

Σ = L L T \Sigma = L L^T Σ=LLT

其中:

  • ( L L L ) 是一个下三角矩阵(即 ( L i j = 0 L_{ij} = 0 Lij=0 ) 当 ( i < j i < j i<j ) 时),通常称为 Cholesky 因子。
  • ( L T L^T LT ) 是 ( L L L ) 的转置,是上三角矩阵。

这种分解的唯一性在于,如果 ( Σ \Sigma Σ ) 为正定矩阵,则 ( L L L ) 是唯一的,且其对角元素必须为正(( L i i > 0 L_{ii} > 0 Lii>0 ))。


Cholesky 分解的计算方法

Cholesky 分解可以通过以下步骤递归计算 ( L L L ) 的元素:

  1. 初始化:( L L L ) 是一个零矩阵,维度与 ( Σ \Sigma Σ ) 相同。
  2. 对角元素:对于第 ( i i i ) 行 ( i i i ) 列(( i = 1 , 2 , … , d i = 1, 2, \dots, d i=1,2,,d )):
    L i i = Σ i i − ∑ k = 1 i − 1 L i k 2 L_{ii} = \sqrt{\Sigma_{ii} - \sum_{k=1}^{i-1} L_{ik}^2} Lii=Σiik=1i1Lik2
    这里的平方和是从前面的列中已计算出的 ( L L L ) 元素贡献。
  3. 非对角元素:对于 ( j > i j > i j>i )(第 ( i i i ) 行 ( j j j ) 列):
    L i j = 1 L i i ( Σ i j − ∑ k = 1 i − 1 L i k L j k ) L_{ij} = \frac{1}{L_{ii}} \left( \Sigma_{ij} - \sum_{k=1}^{i-1} L_{ik} L_{jk} \right) Lij=Lii1(Σijk=1i1LikLjk)

这种方法的时间复杂度为 ( O ( d 3 ) O(d^3) O(d3) ),适合中小规模矩阵。现代深度学习框架(如 PyTorch 或 TensorFlow)提供内置函数(如 torch.cholesky)自动完成计算。

示例

考虑一个简单的 ( 2 × 2 2 \times 2 2×2 ) 正定矩阵:

Σ = [ 4 1 1 2 ] \Sigma = \begin{bmatrix} 4 & 1 \\ 1 & 2 \end{bmatrix} Σ=[4112]

  • ( L 11 = Σ 11 = 4 = 2 L_{11} = \sqrt{\Sigma_{11}} = \sqrt{4} = 2 L11=Σ11 =4 =2 )
  • ( L 21 = Σ 21 L 11 = 1 2 = 0.5 L_{21} = \frac{\Sigma_{21}}{L_{11}} = \frac{1}{2} = 0.5 L21=L11Σ21=21=0.5 )
  • ( L 22 = Σ 22 − L 21 2 = 2 − ( 0.5 ) 2 = 2 − 0.25 = 1.75 ≈ 1.32 L_{22} = \sqrt{\Sigma_{22} - L_{21}^2} = \sqrt{2 - (0.5)^2} = \sqrt{2 - 0.25} = \sqrt{1.75} \approx 1.32 L22=Σ22L212 =2(0.5)2 =20.25 =1.75 1.32 )

于是:

L = [ 2 0 0.5 1.32 ] L = \begin{bmatrix} 2 & 0 \\ 0.5 & 1.32 \end{bmatrix} L=[20.501.32]

验证:( L L T = [ 4 1 1 2 ] L L^T = \begin{bmatrix} 4 & 1 \\ 1 & 2 \end{bmatrix} LLT=[4112] ),计算一致。


Cholesky 分解与特征分解的对比

  • 特征分解:( Σ = U S U T \Sigma = U S U^T Σ=USUT ),( Σ 1 / 2 = U S 1 / 2 U T \Sigma^{1/2} = U S^{1/2} U^T Σ1/2=US1/2UT ),适用于对称矩阵但计算复杂度较高。
  • Cholesky 分解:( Σ = L L T \Sigma = L L^T Σ=LLT ),( Σ 1 / 2 = L \Sigma^{1/2} = L Σ1/2=L )(当 ( L L L ) 是下三角时),专为正定矩阵优化,计算效率更高(约 ( O ( d 3 / 3 ) O(d^3/3) O(d3/3) ))。

在深度学习中,Cholesky 分解常用于需要快速计算矩阵平方根的场景,如高斯分布采样。


在深度学习中的应用

1. 高斯分布采样

在 VAE 或扩散模型中,潜变量或过渡分布(如 ( q φ ( x t ∣ x t − 1 ) = N ( x t ∣ α t x t − 1 , ( 1 − α t ) I ) q_φ(x_t|x_{t-1}) = \mathcal{N}(x_t | \sqrt{α_t} x_{t-1}, (1 - α_t) I) qφ(xtxt1)=N(xtαt xt1,(1αt)I) ))需通过重参数化生成样本:

x t = α t x t − 1 + 1 − α t ϵ x_t = \sqrt{α_t} x_{t-1} + \sqrt{1 - α_t} ϵ xt=αt xt1+1αt ϵ

若协方差矩阵 ( Σ \Sigma Σ ) 不是对角矩阵(例如 ( Σ = L L T \Sigma = L L^T Σ=LLT )),Cholesky 分解提供 ( Σ 1 / 2 = L \Sigma^{1/2} = L Σ1/2=L ),用于:

x t = μ + L ϵ , ϵ ∼ N ( 0 , I ) x_t = μ + L ϵ, \quad ϵ \sim \mathcal{N}(0, I) xt=μ+Lϵ,ϵN(0,I)

这比特征分解更高效,尤其在高维场景。

2. 变分推断

在高斯变分推断中,近似后验的协方差矩阵分解为 ( Σ = L L T \Sigma = L L^T Σ=LLT ),便于计算 KL 散度或采样。

3. 优化算法

在二阶优化(如自然梯度下降)中,Cholesky 分解用于计算 Fisher 信息矩阵的平方根,加速收敛。


PyTorch 实现示例

以下是使用 PyTorch 进行 Cholesky 分解并生成高斯样本的代码:

import torch# 定义一个正定矩阵
Sigma = torch.tensor([[4.0, 1.0], [1.0, 2.0]], dtype=torch.float32)
print("Original matrix:\n", Sigma)# Cholesky 分解
L = torch.cholesky(Sigma)
print("Cholesky factor L:\n", L)# 验证 LL^T = Sigma
reconstructed = L @ L.t()
print("Reconstructed Sigma:\n", reconstructed)
print("Is equal?", torch.allclose(Sigma, reconstructed))# 高斯采样
mu = torch.tensor([0.0, 0.0])
eps = torch.randn(2)  # 标准正态噪声
x = mu + L @ eps      # x ~ N(mu, Sigma)
print("Sampled x:", x)

输出验证了分解的正确性,并展示了采样过程。


注意事项与局限

  • 正定性要求:Cholesky 分解仅适用于正定矩阵。若 ( Σ \Sigma Σ ) 半正定或奇异,需添加正则化(如 ( Σ + ϵ I \Sigma + \epsilon I Σ+ϵI ))。
  • 数值稳定性:在高维或病态矩阵时,Cholesky 分解可能不稳定,需结合数值优化技术。
  • 计算成本:对于大规模矩阵,近似方法(如低秩分解)可能更适合。

总结

Cholesky 分解将对称正定矩阵分解为 ( L L T L L^T LLT ),提供了一种高效计算矩阵平方根 ( Σ 1 / 2 = L \Sigma^{1/2} = L Σ1/2=L ) 的方法。在深度学习中,它广泛用于高斯分布采样、变分推断和优化,特别是在需要快速矩阵运算的场景。掌握 Cholesky 分解有助于研究者优化模型性能,尤其在处理复杂概率分布时。

( v T Σ v > 0 v^T \Sigma v > 0 vTΣv>0 ) 在矩阵论中的意义与二次型的联系

在矩阵论和线性代数中,( v T Σ v > 0 v^T \Sigma v > 0 vTΣv>0 ) 是一个非常重要的条件,特别是在研究对称矩阵的性质时。这个式子与二次型(Quadratic Form)密切相关,并且在深度学习、优化理论和概率模型中有广泛应用。它与二次型的表达式类似!本文将详细解释 ( v T Σ v > 0 v^T \Sigma v > 0 vTΣv>0 ) 的数学意义、其与二次型的联系,以及在实际场景中的作用,目标读者是具备线性代数基础的深度学习研究者。


( v T Σ v > 0 v^T \Sigma v > 0 vTΣv>0 ) 的数学定义

对于一个 ( d × d d \times d d×d ) 的对称矩阵 ( Σ \Sigma Σ )(即 ( Σ = Σ T \Sigma = \Sigma^T Σ=ΣT ))和一个非零向量 ( v ∈ R d v \in \mathbb{R}^d vRd )(即 ( v ≠ 0 v \neq 0 v=0 )),表达式 ( v T Σ v v^T \Sigma v vTΣv ) 称为 ( Σ \Sigma Σ ) 关于向量 ( v v v ) 的二次型。条件 ( v T Σ v > 0 v^T \Sigma v > 0 vTΣv>0 ) 对于任意非零 ( v v v ) 成立时,( Σ \Sigma Σ ) 被定义为正定矩阵(Positive Definite Matrix)。

  • 正定性:若 ( v T Σ v > 0 v^T \Sigma v > 0 vTΣv>0 ) 对所有 ( v ≠ 0 v \neq 0 v=0 ) 成立,则 ( Σ \Sigma Σ ) 是正定矩阵。
  • 半正定性:若 ( v T Σ v ≥ 0 v^T \Sigma v \geq 0 vTΣv0 ) 对所有 ( v v v ) 成立,则 ( Σ \Sigma Σ ) 是半正定矩阵(Positive Semi-Definite Matrix)。
  • 负定性/不定性:类似地,若 ( v T Σ v < 0 v^T \Sigma v < 0 vTΣv<0 )(或符号不固定),则 ( Σ \Sigma Σ ) 可能是负定或不定矩阵。

与二次型的联系

二次型的定义

二次型是向量 ( v v v ) 关于矩阵 ( Σ \Sigma Σ ) 的二次函数形式:

q ( v ) = v T Σ v q(v) = v^T \Sigma v q(v)=vTΣv

  • 如果 ( Σ \Sigma Σ ) 是对称矩阵,二次型 ( q ( v ) q(v) q(v) ) 是一个实值函数,且其值仅依赖于 ( v v v ) 的模和方向。
  • 展开 ( v T Σ v v^T \Sigma v vTΣv )(假设 ( v = [ v 1 , v 2 , … , v d ] T v = [v_1, v_2, \dots, v_d]^T v=[v1,v2,,vd]T )):

v T Σ v = ∑ i = 1 d ∑ j = 1 d v i Σ i j v j v^T \Sigma v = \sum_{i=1}^d \sum_{j=1}^d v_i \Sigma_{ij} v_j vTΣv=i=1dj=1dviΣijvj

这正是二次形式的标准表示,类似于二次方程 ( a x 2 + b x + c ax^2 + bx + c ax2+bx+c ) 的推广到多维向量空间。

正定性与二次型的性质

  • 正定矩阵:( v T Σ v > 0 v^T \Sigma v > 0 vTΣv>0 ) 意味着二次型对于任意非零 ( v v v ) 总是正的,类似于二次函数 ( a x 2 + b x + c > 0 ax^2 + bx + c > 0 ax2+bx+c>0 )(当 ( a > 0 a > 0 a>0 ) 且判别式 ( Δ < 0 \Delta < 0 Δ<0 ) 时)。
  • 几何意义:正定矩阵对应于一个椭球的二次形式,( v T Σ v v^T \Sigma v vTΣv ) 表示 ( v v v ) 在该椭球上的“能量”或“长度”,始终为正。
  • 特征值与正定性:对称矩阵 ( Σ \Sigma Σ ) 的正定性等价于其所有特征值 ( λ i > 0 \lambda_i > 0 λi>0 )。因为通过特征分解 ( Σ = U Λ U T \Sigma = U \Lambda U^T Σ=UΛUT )(( Λ \Lambda Λ ) 为特征值对角矩阵),有:

v T Σ v = v T U Λ U T v = ( U T v ) T Λ ( U T v ) v^T \Sigma v = v^T U \Lambda U^T v = (U^T v)^T \Lambda (U^T v) vTΣv=vTUΛUTv=(UTv)TΛ(UTv)

设 ( w = U T v w = U^T v w=UTv ),则 ( v T Σ v = ∑ i = 1 d λ i w i 2 v^T \Sigma v = \sum_{i=1}^d \lambda_i w_i^2 vTΣv=i=1dλiwi2 )。若 ( λ i > 0 \lambda_i > 0 λi>0 ) 且 ( w ≠ 0 w \neq 0 w=0 ),则总和 ( > 0 > 0 >0 )。


在矩阵论中的用途

1. 协方差矩阵的正定性

在概率论和统计学中,协方差矩阵 ( Σ \Sigma Σ ) 表示随机变量之间的关系,必须是正定或半正定的(若变量线性相关可能退化为半正定)。( v T Σ v > 0 v^T \Sigma v > 0 vTΣv>0 ) 确保:

  • 协方差矩阵可逆(正定矩阵的逆存在)。
  • 方差定义有效(( Var ( v T X ) = v T Σ v > 0 \text{Var}(v^T X) = v^T \Sigma v > 0 Var(vTX)=vTΣv>0 ))。

例如,在 VAE 或扩散模型中,( Σ = ( 1 − α t ) I \Sigma = (1 - α_t) I Σ=(1αt)I ) 是正定矩阵,满足这一条件。

2. 优化中的Hessian矩阵

在优化理论中,Hessian 矩阵(二阶导数矩阵)的正定性表明目标函数是凸的。若 ( v T H v > 0 v^T H v > 0 vTHv>0 ) 对所有 ( v ≠ 0 v \neq 0 v=0 ) 成立,则函数在该点是局部最小值点。这在深度学习中的梯度下降和自然梯度方法中至关重要。具体可以参考笔者的另一篇博客:Hessian 矩阵的正定性与目标函数凸性的证明

3. 能量函数与稳定性

在物理和机器学习中,( v T Σ v v^T \Sigma v vTΣv ) 可表示能量或损失函数。正定性保证系统稳定,例如在高斯过程或核方法中,Gram 矩阵的正定性确保核函数的有效性。


在深度学习中的实际意义

1. 扩散模型中的过渡分布

在 DDPM 中,过渡分布 ( q φ ( x t ∣ x t − 1 ) = N ( x t ∣ α t x t − 1 , ( 1 − α t ) I ) q_φ(x_t|x_{t-1}) = \mathcal{N}(x_t | \sqrt{α_t} x_{t-1}, (1 - α_t) I) qφ(xtxt1)=N(xtαt xt1,(1αt)I) ) 的协方差 ( ( 1 − α t ) I (1 - α_t) I (1αt)I ) 是正定的(因为 ( 0 < α t < 1 0 < α_t < 1 0<αt<1 ),( 1 − α t > 0 1 - α_t > 0 1αt>0 ))。验证 ( v T ( 1 − α t ) I v = ( 1 − α t ) ∥ v ∥ 2 > 0 v^T (1 - α_t) I v = (1 - α_t) \|v\|^2 > 0 vT(1αt)Iv=(1αt)v2>0 ) 确保分布定义合理。

2. Cholesky 分解的前提

Cholesky 分解要求 ( Σ \Sigma Σ ) 为正定矩阵,因为 ( Σ = L L T \Sigma = L L^T Σ=LLT ) 且 ( L L L ) 可逆依赖于 ( v T Σ v > 0 v^T \Sigma v > 0 vTΣv>0 )。这在生成高斯样本时(如 ( x t = μ + L ϵ x_t = μ + L ϵ xt=μ+Lϵ ))至关重要。

3. 损失函数的凸性

在训练神经网络时,正定 Hessian 保证损失函数的局部最小值是稳定的,( v T H v > 0 v^T H v > 0 vTHv>0 ) 成为优化收敛的理论依据。


为什么感觉像二次型?

你的直觉非常正确!( v T Σ v v^T \Sigma v vTΣv ) 正是二次型的标准形式:

  • 一维二次型如 ( a x 2 ax^2 ax2 ) 对应 ( v T diag ( a ) v v^T \text{diag}(a) v vTdiag(a)v )。
  • 多维推广到 ( v T Σ v v^T \Sigma v vTΣv ) 包含交叉项 ( Σ i j v i v j \Sigma_{ij} v_i v_j Σijvivj ),描述变量间的交互。
  • 正定性 ( v T Σ v > 0 v^T \Sigma v > 0 vTΣv>0 ) 类似于二次函数的向上开口(( a > 0 a > 0 a>0 )),保证最小值存在。

代码验证

以下使用 PyTorch 验证正定性:

import torch# 定义一个对称正定矩阵
Sigma = torch.tensor([[4.0, 1.0], [1.0, 2.0]])
v = torch.tensor([1.0, 1.0])# 计算二次型
quad_form = torch.matmul(v, torch.matmul(Sigma, v))
print("v^T Sigma v:", quad_form.item())  # 应 > 0# 特征值验证
eigenvalues = torch.linalg.eigvals(Sigma)
print("Eigenvalues:", eigenvalues)
print("All positive?", torch.all(eigenvalues.real > 0))  # 正定性

输出确认 ( v T Σ v > 0 v^T \Sigma v > 0 vTΣv>0 ) 且特征值均为正。


总结

( v T Σ v > 0 v^T \Sigma v > 0 vTΣv>0 ) 是对称矩阵正定性的定义,与二次型密切相关。它在矩阵论中用于验证协方差矩阵、Hessian 矩阵和核矩阵的性质,在深度学习中确保分布采样、优化稳定性和模型收敛。理解这一条件有助于研究者设计和分析复杂的概率模型,如 VAE 和扩散模型。

希望这篇博客解答了你的疑问!

后记

2025年3月4日13点27分于上海,在grok3大模型辅助下完成。

相关文章:

什么是 Cholesky 分解?兼谈正定矩阵和二次型

Cholesky 分解在深度学习中的应用与理解 Cholesky 分解是一种用于对称正定矩阵的特殊分解方法&#xff0c;在线性代数和概率模型中有广泛应用。对于深度学习研究者来说&#xff0c;理解 Cholesky 分解不仅有助于掌握矩阵运算的理论基础&#xff0c;还能在高斯过程、变分方法&a…...

在单位,领导不说,但自己得懂的7个道理

如果你感到很难继续适应旧模式、旧关系、旧想法&#xff0c;开始厌倦生活&#xff0c;你很可能到了该蜕皮的时候。把“不是自己”的那部分舍弃掉&#xff0c;你就能看见“自己是谁”了。 ——奥赞瓦罗尔&#xff0c;《读者》2024年第11期 前几天听部门里一个新来的小姑娘抱怨&a…...

bge-large-zh-v1.5 与Pro/BAAI/bge-m3 区别

ge-large-zh-v1.5 和 Pro/BAAI/bge-m3 是两种不同的模型&#xff0c;主要区别在于架构、性能和应用场景。以下是它们的对比&#xff1a; 1. 模型架构 bge-large-zh-v1.5&#xff1a; 基于Transformer架构&#xff0c;专注于中文文本的嵌入表示。 参数量较大&#xff0c;适合处…...

lamp平台介绍

一、lamp介绍 网站&#xff1a; 静态 动态 php语言 .php 作用&#xff1a;运行php语言编写动态网站应用 lamp Linux Apache MySQL PHP PHP是作为httpd的一个功能模块存在的 二、部署lamp平台 1、测试httpd是否可正常返回PHP的响应 2、测试PHP代码是否可正常连接数据…...

Windows10系统构建本地安全私有化的个人知识库——采用DeepSeek+RAGFlow

一、为什么要构建本地私有化个人知识库 1.1、自身需求 1、需要相关隐私资料内容的安全保护可控; 2、需要根据自身的隐私资料内容构建出个性化的知识库; 一些常见的业务场景如:①希望我们的智能助手可以根据公司的管理制度回答问题,让员工可以随时了解公司相关制度内容信息;…...

Linux: Centos7 Cannot find a valid baseurl for repo: base/7/x86_64 解决方案

Linux: Centos7 Cannot find a valid baseurl for repo: base/7/x86_64 解决方案 问题背景&#xff1a; 执行yum update出现如下报错 排查虚拟机是否联网&#xff1a; ping -c 4 www.baidu.com 可以看到网络链接没有问题 解决方案&#xff1a; 原因是国外的镜像源有问题&am…...

Java 大视界 -- Java 大数据在智能金融反欺诈中的技术实现与案例分析(114)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

每日OJ_牛客_游游的字母串_枚举_C++_Java

目录 牛客_游游的字母串_枚举 题目解析 C代码 Java代码 牛客_游游的字母串_枚举 游游的字母串 描述&#xff1a; 对于一个小写字母而言&#xff0c;游游可以通过一次操作把这个字母变成相邻的字母。a和b相邻&#xff0c;b和c相邻&#xff0c;以此类推。特殊的&#xff0…...

AI会带给我们一个什么样的未来

AI到来的时代&#xff0c;很多人还没有意识到这一点&#xff0c;就是AI在新的时代不仅改变了游戏规则&#xff0c;还创造了一个全新的游戏规则。我们谁也不清楚接下来会发生什么&#xff1f; AI是否能够像人类一样看、听和说话&#xff0c;或者AI将永远改变企业的运作方式&…...

示例:在WPF中如何使用Segoe MDL2 Assets图标和使用该图标的好处

一、目的&#xff1a;分享在WPF中如何使用Segoe MDL2 Assets图标和使用该图标的好处 在WPF中使用Segoe MDL2 Assets字体&#xff0c;可以通过设置控件的FontFamily属性来实现。Segoe MDL2 Assets是一个包含许多图标的字体&#xff0c;通常用于Windows应用程序的图标显示。 二、…...

h5 IOS端渐变的兼容问题 渐变实现弧形效果

IOS端使用渐变的时候有兼容问题 以下是问题效果&#xff0c;图中黑色部分期望的效果应该是白色的。但是ios端是下面的样子…… 安卓pc 支持&#xff1a; background-image: radial-gradient(circle 40rpx at 100% 0, #f3630c 40rpx, rgb(255, 255, 255) 50%);安卓pc ios支持…...

Linux搜索---find

find搜索 find 命令的核心功能是在指定的目录路径下&#xff0c;递归地搜索文件和目录&#xff0c;并且可以根据多种条件对搜索结果进行筛选&#xff0c;还能对符合条件的文件和目录执行特定操作。 一、基础语法结构 find [起始目录] [匹配条件] [执行操作] # 基本示例 find…...

Libgdx游戏开发系列教程(4)——显示中文文字

目录 2种方法优缺点 BitmapFont FreeTypeFont 方法1 使用BitmapFont 1.下载hiero工具 2.生成fnt文件 3.代码使用 测试效果 方法2 使用FreeType 1.依赖引入 2.代码使用 测试效果 使用疑问点 这里主要介绍关于在Libgdx显示文字的2种方法 本文代码示例采用kotl…...

自然语言处理:朴素贝叶斯

介绍 大家好&#xff0c;博主又来和大家分享自然语言处理领域的知识了。按照博主的分享规划&#xff0c;本次分享的核心主题本应是自然语言处理中的文本分类。然而&#xff0c;在对分享内容进行细致梳理时&#xff0c;我察觉到其中包含几个至关重要的知识点&#xff0c;即朴素…...

题目 3216 ⭐团建⭐【DFS】蓝桥杯2024年第十五届省赛

小蓝正在和朋友们团建&#xff0c;有一个游戏项目需要两人合作&#xff0c;两个人分别拿到一棵大小为 n 和 m 的树&#xff0c;树上的每个结点上有一个正整数权值 c 1 , c 2 , ⋅ ⋅ ⋅ , c n c_1, c_2, , c_n c1​,c2​,⋅⋅⋅,cn​, d 1 , d 2 , ⋅ ⋅ ⋅ , d m d_1, d_…...

UltraScale系列FPGA实现SDI转PCIE3.0采集卡,基于UltraScale GTH+XDMA架构,提供工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目本博已有的 SDI 编解码方案我已有的PCIE方案本博客方案的PCIE2.0版本本博客方案的RIFFA版本 3、详细设计方案设计原理框图SDI 输入设备LMH1219RTWR 均衡器UltraScale …...

Linux系列:如何调试 malloc 的底层源码

一&#xff1a;背景 1. 讲故事 上一篇我们聊过 C# 调用 C 的 malloc 代码来演示heap的内存泄露问题&#xff0c;但要想深入研究得必须把 malloc 的实现库 libc.so 给调试起来&#xff0c;大家都知道在Linux 上 libc 和 Windows 的 Win32 API 是一个层级的&#xff0c;由于 Li…...

深入 PipeWire

简介 随着它的成熟&#xff0c;PipeWire 项目正在慢慢地变得流行。它的文档依然相对稀少&#xff0c;但正在逐渐增长。然而&#xff0c;让项目外部的人尝试用他们自己的语言来理解和解释它总是一个好主意&#xff0c;重申想法&#xff0c;从他们自己的角度来看待它。 在之前的…...

20250304笔记-阅读论文

文章目录 前言一、寻找论文1.1寻找有代码的论文方法一&#xff1a;浏览器扩展1.1.1使用流程 方法二&#xff1a;使用Papers with Code 1.2大量搜索代码 二、阅读论文所用软件 三、引用文献格式总结 前言 一、寻找论文 1.1寻找有代码的论文 方法一&#xff1a;浏览器扩展 浏览…...

线程POSIX信号量/基于环形队列的⽣产消费模型

一&#xff0c;POSIX线程信号量 信号量的本质就是一个计数器&#xff0c;也是对资源的预定机制&#xff0c;POSIX信号量和SystemV信号量作⽤相同&#xff0c;都是⽤于同步操作&#xff0c;达到⽆冲突的访问共享资源⽬的。但 POSIX可以⽤于线程间同步。 1&#xff0c;初始化信…...

Spark核心之02:常用算子详解

1、RDD操作详解 # 启动spark-shell spark-shell --master local[2] 1.1 基本转换 1) map map是对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD。 任何原RDD中的元素在新RDD中都有且只有一个元素与之对应。 举例&#xff1a; scala> val a sc.parallelize(1 …...

分布式锁—3.Redisson的公平锁二

大纲 1.Redisson公平锁RedissonFairLock概述 2.公平锁源码之加锁和排队 3.公平锁源码之可重入加锁 4.公平锁源码之新旧版本对比 5.公平锁源码之队列重排 6.公平锁源码之释放锁 7.公平锁源码之按顺序依次加锁 4.公平锁源码之新旧版本对比 (1)新版本再次加锁失败不会刷新…...

C# 类库打包dll文件

目录 前言操作流程注意事项 前言 在C#中&#xff0c;有多种方式可以对代码进行加密&#xff0c;以保护源代码不被轻易查看或修改&#xff0c;这篇文章主要介绍将C# cs类文件加密为dll文件的方式进行保护。 操作流程 在 Visual Studio 中&#xff0c;选择“创建新项目”。 选…...

DELL EMC Unity存储如何让控制器进入service mode和退出service mode

近期遇到好几个关于DELL EMC unity &#xff08;VNXe&#xff09;存储系统挂掉的案例&#xff0c;都是很后期才寻找支持到我们这里&#xff0c;然后再看问题&#xff0c;已经变得很复杂&#xff0c;几乎都是从一个相对简单的问题搞成了一锅粥甚至最后丢数据的情况。 为此&…...

【微知】如何通过mlxlink查看Mellanox网卡和光模块相关的信息?( mlxlink -d 01:00.0 -m)

背景 通过mlxlink可以查看Mellanox网卡的一些链路信息和硬件信息&#xff0c;也可以查看所插入的光模块的一些信息。 兄弟篇通过ethtool查看的方法&#xff1a;如何查看Mellanox网卡上的光模块的信息&#xff1f; 命令 mlxlink -d 01:00.0 -mman手册介绍&#xff1a; 如果…...

FPGA开发,使用Deepseek V3还是R1(1):应用场景

以下都是Deepseek生成的答案 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;1&#xff09;&#xff1a;应用场景 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;2&#xff09;&#xff1a;V3和R1的区别 FPGA开发&#xff0c;使用Deepseek V3还是R1&#x…...

Linux系列:如何用 C#调用 C方法造成内存泄露

一个简单的非托管内存泄露 1. 构建 so 文件 在 Windows 平台上我们会通过 MSVC 编译器将 C代码编译出一个成品 .dll&#xff0c;在 Linux 上通常会借助 gcc 将 c 编译成 .so 文件&#xff0c;这个.so 全称 Shared Object&#xff0c;为了方便讲解&#xff0c;先上一段简单的代码…...

C# 数据类型相关

分类 按照数据复杂程度 按照数据存储 类型转换 隐式转换 隐式转换无法完成由精度高的数据类型向精度低的数据类型转换 显式转换 又称为强制类型转换&#xff0c;显示转换不一定总是成功&#xff0c;且转换过程中可能出现数据丢失 int num 666;float result (float)num; …...

Python Web应用开发之Flask框架——基础

一、前言 在即将开启的 Flask 学习之旅中,为了能够顺利掌握并运用 Flask 进行 Web 开发,您需要具备一定的基础知识,同时了解相应的运行环境。 需要你具备的知识:Python 编程语言、HTML、CSS、HTTP协议、数据库(如:MySQL、MongoDB) 本文所使用的环境:操作系统Windows…...

分析白屏winscope

在 Android 设备上&#xff0c;播放视频时锁屏后解锁出现闪白屏的问题&#xff0c;通常与 Surface 生命周期、视频渲染或 UI 刷新机制有关。要定位和解决这个问题&#xff0c;可以按照以下步骤进行分析&#xff0c;并利用 WinScop 工具&#xff08;如果适用&#xff09;来辅助调…...