奇异值分解(SVD)【详细推导证明】

机器学习笔记

机器学习系列笔记,主要参考李航的《机器学习方法》,见参考资料。
第一章 机器学习简介
第二章 感知机
第三章 支持向量机
第四章 朴素贝叶斯分类器
第五章 Logistic回归
第六章 线性回归和岭回归
第七章 多层感知机与反向传播【Python实例】
第八章 主成分分析【PCA降维】
第九章 隐马尔可夫模型
第十章 奇异值分解

文章目录

  • 机器学习笔记
  • 一、矩阵的基本子空间
  • 二、舒尔分解
  • 三、奇异值分解
    • (1)定义
    • (2)证明
    • (3)与四大子空间的关系
    • (4)推论
  • 四、矩阵近似
    • (1)低秩矩阵估计
    • (2)矩阵的外积展开
  • 参考资料


奇异值分解(Singular Value Decomposition)是线性代数中一种重要的矩阵分解,奇异值分解则是特征分解在任意矩阵上的推广。在信号处理、统计学等领域有重要应用。奇异值分解在统计中的主要应用为主成分分析(PCA),PCA算法的作用是把数据集映射到低维空间中去。 数据集的特征值(在SVD中用奇异值表征)按照重要性排列,降维的过程就是舍弃不重要的特征向量的过程,而剩下的特征向量组成的空间即为降维后的空间。

一、矩阵的基本子空间

对非零矩阵 A ∈ R m × n A\in\mathbb{R}^{m\times n} ARm×n,其秩 rank ( A ) = r (A)=r (A)=r , r ≤ min ⁡ { m , n } . r\leq\min\{m,n\}. rmin{m,n}. A A A的四个基本子空间:

  1. A A A的列空间( A A A的值域):
    R ( A ) = { z ∈ R m ∣ ∃ x ∈ R n , z = A x } R(A)=\{z\in\mathbb{R}^m|\exists x\in\mathbb{R}^n,z=Ax\} R(A)={zRm∣∃xRn,z=Ax}
  2. A A A的零空间:
    N ( A ) = { x ∈ R n ∣ A x = 0 } . N(A)=\{x\in\mathbb{R}^n|Ax=0\}. N(A)={xRnAx=0}.
  3. A A A的行空间( A T A^T AT的值域):
    R ( A T ) = { y ∈ R n ∣ ∃ x ∈ R m , y = A T x } R(A^T)=\{y\in\mathbb{R}^n|\exists x\in\mathbb{R}^m,y=A^Tx\} R(AT)={yRn∣∃xRm,y=ATx}
  4. A A A的左零空间( A T A^T AT的零空间):

N ( A T ) = { x ∈ R m ∣ A T x = 0 } . N(A^T)=\{x\in\mathbb{R}^m|A^Tx=0\}. N(AT)={xRmATx=0}.

四个子空间的关系如下图所示:
截屏2024-01-18 19.05.15
我们证明其中两条:

  • R ( A ) ⊥ N ( A T ) R(A)\perp N(A^{\mathrm{T}}) R(A)N(AT)

证明:

∀ z ∈ R ( A ) , y ∈ N ( A T ) \forall z\in R(A),y\in N(A^T) zR(A),yN(AT),有
< z , y > = z T y = ( A x ) T y = x T A T y = 0 <z,y>=z^Ty=(Ax)^Ty=x^TA^Ty=0 <z,y>=zTy=(Ax)Ty=xTATy=0
所以 z ⊥ y z\perp y zy,证毕.

  • dim ⁡ ( R ( A ) ) + dim ⁡ ( N ( A ) ) = n \operatorname{dim}(R(A))+\operatorname{dim}(N(A))=n dim(R(A))+dim(N(A))=n(秩零定理)

证明:

矩阵A的零空间就Ax=0的解的集合,则零空间的维数为n-r。因为秩为r,则自由变量的个数为n-r,有几个自由变量,零空间就可以表示成几个特解的线性组合,也即是零空间的维数为自由变量的个数。

二、舒尔分解

在介绍奇异值分解之前,我们首先介绍一下Schur分解,利用Schur分解,可以导出奇异值分解.

Schur decomposition

For each A ∈ C n × n A\in\mathbb{C}^{n\times{n}} ACn×n with eigenvalue λ 1 , λ 2 , ⋯ , λ n \lambda_1,\lambda_2,\cdots,\lambda_n λ1,λ2,,λn in any prescribed order,there exist unitary matrix U ∈ C n × n s.t ⁡ . T = U ∗ A U U\in C^{n\times n} \operatorname{s.t}. T=U^*AU UCn×ns.t.T=UAU is an upper triangle matrix with diagonal entries t i i = λ i t_{ii}=\lambda_i tii=λi:
T = [ λ 1 t 12 ⋯ t 1 n 0 λ 2 ⋯ ⋮ 0 ⋯ λ n − 1 t n − n 0 ⋯ ⋯ λ n ] . T = \left.\left[\begin{matrix} \lambda_{1}&t_{12}&\cdots&t_{1n}\\ 0 &\lambda_{2}&\cdots&\vdots\\ 0 &\cdots &\lambda_{n-1}&t_{n-n}\\ 0 &\cdots &\cdots &\lambda_{n}\end{matrix}\right.\right]. T= λ1000t12λ2λn1t1ntnnλn .

截屏2024-01-15 17.41.40

  • 也就是说Hermitian矩阵的Schur分解其实就是特征值分解.
  • Hermitian矩阵一定可以进行对角化.(实对称矩阵也一定可以对角化)

截屏2024-01-15 17.42.36

三、奇异值分解

(1)定义

截屏2024-01-18 16.43.43

(2)证明

因为 A ∈ R m × n A\in\mathbb{R}^{m\times n} ARm×n(不妨设 m > n m>n m>n,且 rank ⁡ ( A ) = r \operatorname{rank}( A) = r rank(A)=r),所以 A T A A^TA ATA A A T AA^T AAT都是对称的实矩阵,我们以 A T A A^TA ATA为例,由Schur分解知,一定存在正交矩阵 V ∈ R n × n V\in\mathbb{R}^{n\times n} VRn×n,使得:
V T A T A V = Λ = diag ⁡ ( λ 1 , λ 2 , ⋯ , λ n ) = Σ T Σ V^TA^TAV=\Lambda=\operatorname{diag}(\lambda_1,\lambda_2,\cdots,\lambda_n)=\Sigma^T\Sigma VTATAV=Λ=diag(λ1,λ2,,λn)=ΣTΣ其中 λ 1 ≥ λ 2 ≥ ⋯ λ n ≥ 0 \lambda_1\geq\lambda_2\geq\cdots\lambda_n\geq 0 λ1λ2λn0,此时矩阵 V V V我们已经有了,就是 A T A A^TA ATA的特征向量矩阵,那么如何构造 U U U呢?我们首先给出一个引理:

rank ⁡ ( A T A ) = rank ⁡ ( A ) = r . \operatorname{rank}( A^TA) = \operatorname{rank}( A) = r. rank(ATA)=rank(A)=r.

证明:设 x ∈ R n x\in\mathbb{R}^n xRn,则
A x = 0 ⇒ A T A x = 0 ; Ax=0\Rightarrow A^TAx=0; Ax=0ATAx=0;
反之,
A T A x = 0 ⇒ x T A T A x = 0 ⇒ ∥ A x ∥ 2 2 = 0 ⇒ A x = 0. A^TAx=0\quad\Rightarrow\quad x^TA^TAx=0\quad\Rightarrow\parallel Ax\parallel_2^2=0\quad\Rightarrow Ax=0. ATAx=0xTATAx=0⇒∥Ax22=0Ax=0.
A T A A^TA ATA A A A的零空间相同,因此 rank ⁡ ( A T A ) = rank ⁡ ( A ) = r . \operatorname{rank}( A^TA) = \operatorname{rank}( A) = r. rank(ATA)=rank(A)=r.

rank ⁡ ( A T A ) = rank ⁡ ( A ) = r \operatorname{rank}( A^TA) = \operatorname{rank}( A) = r rank(ATA)=rank(A)=r,则
λ 1 ≥ λ 2 ≥ ⋯ ≥ λ r > 0 , λ r + 1 = ⋯ = λ n = 0. \lambda_1\geq\lambda_2\geq\cdots\geq\lambda_r>0,\\ \lambda_{r+1}=\cdots=\lambda_n=0. λ1λ2λr>0,λr+1==λn=0.
我们将 V V V分成两部分 V = [ V 1 , V 2 ] V=[V_1,V_2] V=[V1,V2],其中 V 1 = [ v 1 , ⋯ , v r ] V_1=[v_1,\cdots,v_r] V1=[v1,,vr], V 2 = [ v r + 1 , ⋯ , v n ] . V_2=[v_{r+1},\cdots,v_n]. V2=[vr+1,,vn].

  • v r + 1 , ⋯ , v n v_{r+1},\cdots,v_n vr+1,,vn正好构成 A T A A^TA ATA零空间 N ( A T A ) ( N(A^TA)( N(ATA)(也是 N ( A ) ) {N}(A)) N(A))的一组标准正交基.
  • A V 2 = 0. AV_{2}=0. AV2=0.
  • I = V V T = V 1 V 1 T + V 2 V 2 T . I=VV^T=V_1V_1^T+V_2V_2^T. I=VVT=V1V1T+V2V2T.
  • A = A I = A ( V 1 V 1 T + V 2 V 2 T ) = A V 1 V 1 T . A=AI=A(V_1V_1^T+V_2V_2^T)=AV_1V_1^T. A=AI=A(V1V1T+V2V2T)=AV1V1T.

同样的我们将 U U U分为两部分 U = [ U 1 , U 2 ] U=[U_1,U_2] U=[U1,U2],考察 A V = U Σ AV=U \Sigma AV=UΣ:
A [ v 1 … v r … v n ] = [ u 1 ⋯ u m ] [ σ 1 0 ⋯ σ r 0 0 ] A v 1 = σ 1 u 1 ⇒ u 1 = A v 1 σ 1 ( σ 1 ≠ 0 ) . \begin{aligned} & A\left[\begin{array}{lll} v_1 & \ldots & v_r &\ldots v_n \end{array}\right]=\left[\begin{array}{lll} u_1 & \cdots & u_m \end{array}\right]\left[\begin{array}{ccc} \sigma_1 & 0 \\ \cdots & \sigma_r \\ 0 & & 0 \end{array}\right] \\ & Av_1=\sigma_1u_1\Rightarrow u_1=\frac{A v_1}{\sigma_1} \quad\left(\sigma_1 \neq 0\right) . \\ \end{aligned} A[v1vrvn]=[u1um] σ100σr0 Av1=σ1u1u1=σ1Av1(σ1=0).
σ 1 … σ r ≠ 0 \sigma_1 \ldots \sigma_r \neq 0 σ1σr=0,则有:
u i = A v i σ i , i = 1 , 2 ⋯ , r . u_i=\frac{A v_i}{\sigma_i} \quad ,i=1,2\cdots,r. ui=σiAvi,i=1,2,r.于是我们从 V 1 = [ v 1 , v 2 , ⋯ , v r ] V_1=[v_1,v_2,\cdots,v_r] V1=[v1,v2,,vr]出发,构造 U 1 = [ u 1 , ⋯ , u r ] U_1=[u_1,\cdots,u_r] U1=[u1,,ur]如下:
u i = 1 λ i A v i , i = 1 , ⋯ , r . u_i=\frac1{\sqrt{\lambda_i}}Av_i,i=1,\cdots,r. ui=λi 1Avi,i=1,,r.
下面验证 U 1 U_1 U1中的列向量是否正交:

u i T u j = 1 λ i λ j v i T A T A v j = 1 λ i λ j v i T λ j v j = δ i j = { 1 , i = j 0 , i ≠ j . u_i^Tu_j=\frac1{\sqrt{\lambda_i\lambda_j}}v_i^TA^TAv_j=\frac1{\sqrt{\lambda_i\lambda_j}}v_i^T\lambda_jv_j=\delta_{ij}= \begin{cases} 1,i=j\\ 0,i\neq j. \end{cases} uiTuj=λiλj 1viTATAvj=λiλj 1viTλjvj=δij={1,i=j0,i=j.

这说明
[ u 1 , ⋯ , u r ] [u_1,\cdots,u_r] [u1,,ur]
A A A的列空间 R ( A ) R(A) R(A)的一组标准正交基.接着我们构造 U 2 U_2 U2,补全 U = [ U 1 , U 2 ] U=[U_1,U_2] U=[U1,U2].我们知道 R ( A ) R(A) R(A)的正交补空间为 N ( A T ) N(A^T) N(AT),设 u r + 1 , ⋯ , u m u_{r+1},\cdots,u_m ur+1,,um N ( A T ) N(A^T) N(AT)的一组标准正交基.令
U 2 = [ u r + 1 , ⋯ , u m ] U_2=[u_{r+1},\cdots,u_m] U2=[ur+1,,um]那么此时 U = [ U 1 , U 2 ] U=[U_1,U_2] U=[U1,U2]为正交矩阵,整个 U U U我们就都得到了!

(3)与四大子空间的关系

再来观察:
A [ V 1 , V 2 ] = [ U 1 , U 2 ] Σ A[V_1,V_2]=[U_1,U2]\Sigma A[V1,V2]=[U1,U2]Σ
由上面的证明过程我们知道:

  1. V 1 V_1 V1 R ( A T ) R(A^T) R(AT)的一组基, V 2 V_2 V2 N ( A ) N(A) N(A)的一组基.
  2. U 1 U_1 U1 R ( A ) R(A) R(A)的一组基, U 2 U2 U2 N ( A T ) N(A^T) N(AT)的一组基.

矩阵A的奇异值分解的左右奇异向量刚好是 A A A的四大基本子空间的基!

(4)推论

A = U Σ V T A=U\Sigma V^T A=UΣVT可推出

  • A T A = V ( Σ T Σ ) V T A^TA=V(\Sigma^T\Sigma)V^T ATA=V(ΣTΣ)VT右奇异向量 A T A A^TA ATA的特征向量.
  • A A T = U ( Σ Σ T ) U T AA^T=U(\Sigma\Sigma^T)U^T AAT=U(ΣΣT)UT左奇异向量 A A T AA^T AAT的特征向量.
  • A A A的奇异值 σ 1 , ⋯ , σ n \sigma_1,\cdots,\sigma_n σ1,,σn是唯一的,但 U U U V V V不唯一.
  • 矩阵的奇异值分解可以看作将其对应的线性变换分解为旋转变换 ( V T ) (V^T) (VT)、伸缩变换 ( Σ ) (\Sigma) (Σ)及旋转变换 ( U ) (U) (U)的组合.

截屏2024-01-18 17.47.50

四、矩阵近似

奇异值分解的一个应用是低秩矩阵估计,在F范数最小意义下,可以用秩为k(k<r)的低秩矩阵对A进行近似.

(1)低秩矩阵估计

下面首先给出紧奇异值分解和截断奇异值分解的概念:

截屏2024-01-18 18.40.48

截屏2024-01-18 18.41.00

这里我们采用 F F F范数(参考我的这篇文章:范数)来刻画两个矩阵 A A A X X X的差异: ∥ A − X ∥ F \|A-X\|_F AXF,下面我们通过定理2会知道,在 F F F范数的意义下,截断奇异值分解就是秩不超过 k k k的矩阵中对 A A A的最好的近似.

引理1

A ∈ R m × n A\in\mathbb{R}^{m\times n} ARm×n的奇异值分解为 U Σ V T U\Sigma V^T UΣVT,其中 Σ = \Sigma= Σ=diag ( σ 1 , ⋯ , σ n ) ( \sigma_1, \cdots , \sigma_n) (σ1,,σn) ,则:
∥ A ∥ F = ∑ i = 1 n σ i 2 \parallel A\parallel_F=\sqrt{\sum_{i=1}^n\sigma_i^2} AF=i=1nσi2
证明: ∥ A ∥ F = ∥ U Σ V T ∥ F = ∥ Σ ∥ F = ∑ i = 1 n σ i 2 . \|A\|_F=\|U\Sigma V^T\|_F=\|\Sigma\|_F=\sqrt{\sum_{i=1}^n\sigma_i^2}. AF=UΣVTF=∥ΣF=i=1nσi2 .

引理2

A ∈ R m × n A\in\mathbb{R}^{m\times n} ARm×n rank ⁡ ( A ) = r \operatorname{rank}(A)=r rank(A)=r,并设 M M M R m × n \mathbb{R}^{m\times n} Rm×n中所有秩不超过 k k k的矩阵集合, 0 < k < r 0<k<r 0<k<r,则存在一个秩为 k k k的矩阵 X X X,使得:
∥ A − X ∥ F = min ⁡ S ∈ M ∥ A − S ∥ F . \|A-X\|_F=\min_{S\in\mathcal{M}}\|A-S\|_F. AXF=SMminASF.
称矩阵 X X X为矩阵 A A AFrobenius范数意义下的最优近似.

截屏2024-01-18 18.37.48

  • 上述定理说明在秩不超过 k k k m × n m\times n m×n矩阵集合中,存在矩阵 A A A的最优近似矩阵 X X X
  • A ′ = U Σ ′ V T A^{\prime}=U\Sigma^{\prime}V^{T} A=UΣVT就是这样的最优近似矩阵.
  • A A A的紧奇异值分解是在Frobenius范数意义下 A A A的无损压缩.
  • A A A的秩为 k k k的截断奇异值分解是A的有损压缩,通常 k k k远小于 r r r, 因此是由低秩矩阵实现了对 A A A的压缩

(2)矩阵的外积展开

A ∈ R m × n A\in\mathbb{R}^{m\times n} ARm×n且 其奇异值分解为 U Σ V T U\Sigma V^T UΣVT,则

A = U Σ V T = [ σ 1 u 1 , ⋯ , σ n u n ] [ v 1 T ⋮ v n T ] = σ 1 u 1 v 1 T + ⋯ + σ n u n v n T . \begin{aligned} A&=U\Sigma V^T\\ &=[\sigma_1u_1,\cdots,\sigma_nu_n] \left[\begin{array}{l}v_1^T\\\vdots\\v_n^T\end{array}\right]\\ &=\sigma_1u_1v_1^T+\cdots+\sigma_nu_nv_n^T. \end{aligned} A=UΣVT=[σ1u1,,σnun] v1TvnT =σ1u1v1T++σnunvnT.
A = σ 1 u 1 v 1 T + ⋯ + σ n u n v n T A=\sigma_1u_1v_1^T+\cdots+\sigma_nu_nv_n^T A=σ1u1v1T++σnunvnT A A A外积展开式. 令
A k = ∑ i = 1 k σ i u i v i T A_k=\sum_{i=1}^k\sigma_iu_iv_i^T Ak=i=1kσiuiviT
A k A_k Ak的秩为 k k k, 是 A A A的截断奇异值分解, A k A_k Ak是秩为 k k k的矩阵中在F范数意义下 A A A的最优近似矩阵.

参考资料

  1. 李航. 机器学习方法. 清华大学出版社, 2022.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/634609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dubbo-admin监控中心

监控中心 Dubbo-admin监控中心执行操作启动provider和consumer项目进行测试总体流程 Dubbo-admin监控中心 dubbo-admin下载路径 git clone https://github.com/apache/dubbo-admin.git图1-1 dubbo-admin项目文件展示 执行操作 # 启动zookeeper# 前端 cd dubbo-admin-ui npm i…

Linux 设备树详解

目录 1、概述 2、节点&#xff08; node&#xff09;和属性&#xff08; property&#xff09; 2.1、DTS 描述键值对的语法&#xff1a; 2.2 节点语法规范说明 2.3节点名及节点路径 2.4 节点别名&#xff08;节点引用&#xff09; 2.5 合并节点内容 2.6 替换节点内容 2…

java:流程控制

一、流程控制语句分类 顺序结构分支结构&#xff08;if&#xff0c;switch&#xff09;循环结构&#xff08;for&#xff0c;while&#xff0c;do...while&#xff09; 二、顺序结构 定义&#xff1a;顺序结构是程序中最基本的流程控制&#xff0c;没有特定的语法结构&#…

Sqoop故障排除指南:处理错误和问题

故障排除是每位数据工程师和分析师在使用Sqoop进行数据传输时都可能遇到的关键任务。Sqoop是一个功能强大的工具&#xff0c;但在实际使用中可能会出现各种错误和问题。本文将提供一个详尽的Sqoop故障排除指南&#xff0c;涵盖常见错误、问题和解决方法&#xff0c;并提供丰富的…

HarmonyOS4.0系列——07、自定义组件的生命周期、路由以及路由传参

自定义组件的生命周期 允许在生命周期函数中使用 Promise 和异步回调函数&#xff0c;比如网络资源获取&#xff0c;定时器设置等&#xff1b; 页面生命周期 即被Entry 装饰的组件生命周期&#xff0c;提供以下生命周期接口&#xff1a; onPageShow 页面加载时触发&#xff…

2023年上半年网络工程师真题(3/3)

41.某主机无法上网&#xff0c;查看本地连接后&#xff0c;发现只有发送包没有接收包&#xff0c;故障原因可能是&#xff08;C&#xff09;。 A.网线没有插好 B.DNS配置错误 C.IP地址配置错误 D.TCP/IP协议故障 如果网线没有插好&#xff0c;就没有发送包没有接收包;DNS配…

UI设计中的插画运用优势(上)

1. 插画是设计的原创性和艺术性的基础 无论是印刷品、品牌设计还是UI界面&#xff0c;更加风格化的插画能够将不同的风格和创意加入其中&#xff0c;在激烈的竞争中更容易因此脱颖而出。留下用户才有转化。 2. 插画是视觉触发器&#xff0c;瞬间传达大量信息 我们常说「一图胜千…

Skydel 23.8新版本发布!GNSS模拟器完成首项实地路测项目

奥本大学自动驾驶团队运用GNSS模拟器完成首项实地路测项目 奥本大学与最近与阿拉巴马州伯明翰的巴伯赛车运动公园合作进行道路测试&#xff0c;该车在没有任何人工干预的情况下成功绕赛道完成了一圈&#xff0c;这也是印地自动驾驶挑战赛中车辆首次在美国专业赛道上完成一圈。…

unity-shader笔记OLD

shader shader在面板中的位置相关代码代码切换shader shader在面板中的位置 选中物体属性面板中 相关代码 代码切换shader 挂载到怪物上的shader名字统一叫body&#xff0c;然后获取上面的SkinnedMeshRender SkinnedMeshRender smr&#xff1b; //恢复到原来的shader …

智能驾驶新浪潮:SSD与UFS存储技术如何破浪前行?- SSD篇

随着汽车行业的不断发展&#xff0c;对存储的需求也在不断的变化中。早期阶段的汽车对存储的需求主要是收音机、播放器、导航仪等&#xff0c;有些还可以支持光盘和U盘的外接播放。中期阶段&#xff0c;也是当前主流的燃油车行车记录、多媒体、车联网的需求&#xff0c;对存储性…

大数据开发之Hadoop(优化新特征)

第 1 章&#xff1a;HDFS-故障排除 注意&#xff1a;采用三台服务器即可&#xff0c;恢复到Yarn开始的服务器快照。 1.1 集群安全模块 1、安全模式&#xff1a;文件系统只接收读数据请求&#xff0c;而不接收删除、修改等变更请求 2、进入安全模式场景 1&#xff09;NameNod…

国考省考行测:语句排序2刷题

国考省考行测&#xff1a;语句排序2刷题 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能&#xff0c;附带行测和申论&#xff0c;而常规国考省考最重要的还是申论和行测&#xff0c;所以大家认真准备吧&#xff0c;我讲一起屡屡申论和行测的重要知识点…

软件是什么?前端,后端,数据库

软件是什么&#xff1f; 由于很多东西没有实际接触&#xff0c;很难理解&#xff0c;对于软件的定义也是各种各样。但是我还是不理解&#xff0c;软件开发中的前端&#xff0c;后端&#xff0c;数据库到底有什么关系呢&#xff01; 这个问题足足困扰了三年半&#xff0c;练习时…

VUE 中的 v-for 和 v-if 是否可以共存

VUE 中的 v-for 和 v-if 是否可以共存 前言1、面试经2、正确回答3、总结总结&#xff1a; 前言 要成功&#xff0c;先发疯&#xff0c;头脑简单往前冲&#xff01; 三金四银&#xff0c;金九银十&#xff0c;多学知识&#xff0c;也不能埋头苦干&#xff0c;要成功&#xff0c…

获取编译工具链默认的链接脚本

1、ld命令使用“–verbose”参数 命令&#xff1a;riscv64-linux-gnu-ld --verbose想使用自己的链接脚本&#xff0c;链接时使用“-T”指定

基于springboot+vue的高校心理教育辅导系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

【并发编程系列】putIfAbsent和getOrDefault用法

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

day20 最大的二叉树 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树

题目1&#xff1a;654 最大二叉树 题目链接&#xff1a;654 最大二叉树 题意 根据不重复的整数数组nums构建最大的二叉树 &#xff0c;根节点是数组中的最大值&#xff0c;最大值左边的子数组构建左子树&#xff0c;最大值右边的子数组构建右子树 nums数组中最少含有1个元素…

Debian 11.8.0 安装图解

引导和开始安装 这里直接回车确认即可&#xff0c;选择图形化安装方式。 选择语言 这里要区分一下&#xff0c;当前选中的语言作为安装过程中安装器所使用的语言&#xff0c;这里我们选择中文简体。不过细心的同学可能发现&#xff0c;当你选择安装器语言之后&#xff0c;后续安…

社科院与美国杜兰大学金融管理硕士项目——在职读研的挑战与应对策略探秘

在繁忙的职场中&#xff0c;许多人渴望提升自己的学术背景和专业素养。社科院与美国杜兰大学金融管理硕士项目是专为金融职场人士打造的在职学习平台。然而&#xff0c;在职读研并非易事&#xff0c;这一兼具学术追求与职业发展的学习模式&#xff0c;对于许多人来说&#xff0…