线性代数笔记28--奇异值分解(SVD)
1. 奇异值分解
假设矩阵 A A A有 m m m行 n n n列
奇异值分解就是在 A A A的行向量上选取若干对标准正交基,对它作 A A A矩阵变化并投射到了 A A A的列空间上的正交基的若干倍数。
A v → = u → σ u → ∈ R m v → ∈ R n A\overrightarrow{v}=\overrightarrow{u} \sigma\\ \overrightarrow{u} \in R^{m} \quad \overrightarrow{v} \in R^{n} Av=uσu∈Rmv∈Rn
其中 σ \sigma σ被称为奇异值,我们在计算时将奇异值从大到小进行排列。
假设有 r r r对行空间和列空间上的标准正交基可以进行上面的变化
那么我们得到了
A [ v 1 → ⋯ v r → v r + 1 → ⋯ v n → ] = [ u 1 → ⋯ u r → u r + 1 → ⋯ u m → ] [ σ 1 σ 2 ⋯ σ r ] A[\overrightarrow{v_1}\cdots\overrightarrow{v_r}\overrightarrow{v_{r+1}}\cdots \overrightarrow{v_n}] =\\ [\overrightarrow{u_1}\cdots\overrightarrow{u_r}\overrightarrow{u_{r+1}}\cdots\overrightarrow{u_m}] \begin{bmatrix} \sigma_1 & \ & \ & \ \\ \ & \sigma_2 & \ & \ \\ \ & \ & \cdots & \ \\ \ & \ & \ & \ \sigma_r \\ \ & \ & \ & \ & \\ \end{bmatrix} A[v1⋯vrvr+1⋯vn]=[u1⋯urur+1⋯um] σ1 σ2 ⋯ σr
其中
u 1 → u 2 → ⋯ u r → ∈ C ( A ) \overrightarrow{u_1}\overrightarrow{u_2} \cdots \overrightarrow{u_r} \in C(A) u1u2⋯ur∈C(A)
u r + 1 → ⋯ u m → ∈ N ( A ⊤ ) \overrightarrow{u_{r+1}} \cdots \overrightarrow{u_m}\in N(A^{\top}) ur+1⋯um∈N(A⊤)
v 1 → v 2 → ⋯ v r → ∈ C ( A ⊤ ) \overrightarrow{v_1}\overrightarrow{v_2} \cdots \overrightarrow{v_r}\in C(A^{\top}) v1v2⋯vr∈C(A⊤)
v r + 1 → ⋯ v r → ∈ N ( A ) \overrightarrow{v_{r+1}} \cdots \overrightarrow{v_r} \in N(A) vr+1⋯vr∈N(A)
Σ \Sigma Σ矩阵有 m m m行, m − r m-r m−r个零行。
SVD将四个空间联系起来, 将上面公式换成矩阵形式我们得到。
A V = U Σ AV=U\Sigma AV=UΣ
更进一步地有
A = U Σ V − 1 = U Σ V ⊤ A=U\Sigma V^{-1}=U\Sigma V^{\top} A=UΣV−1=UΣV⊤
加上行列号标识
A m × n = U m × m Σ m × n V n × n ⊤ A_{m\times n}=U_{m\times m}\Sigma_{m\times n}V^{\top}_{n\times n} Am×n=Um×mΣm×nVn×n⊤
A = σ 1 u 1 v 1 ⊤ + ⋯ + σ r u r v r ⊤ = ∑ i = 1 r σ i u i v i ⊤ A =\sigma_1u_1v_1^{\top} + \cdots +\sigma_r u_rv_r^{\top}=\sum_{i=1}^{r}\sigma_iu_iv_i^{\top} A=σ1u1v1⊤+⋯+σrurvr⊤=∑i=1rσiuivi⊤
这也是svd最精华的地方,任何一个矩阵都可以写成至多 n n n个
m × 1 m\times1 m×1矩阵和 1 × n 1\times n 1×n矩阵的倍数相加。
为了规范,我们约定 σ 1 ≥ σ 2 ≥ ⋯ ≥ σ r \sigma_1 \ge \sigma_2 \ge \cdots \ge \sigma_r σ1≥σ2≥⋯≥σr。
如何求 A A A的奇异值分解呢?
可以利用 A ⊤ A A A ⊤ A^{\top}A\quad AA^{\top} A⊤AAA⊤来求。
假设 A = U Σ V ⊤ A = U\Sigma V^{\top} A=UΣV⊤
A ⊤ A = V Σ ⊤ U ⊤ U Σ V ⊤ = V Σ ⊤ Σ V ⊤ A A ⊤ = U Σ ⊤ V ⊤ V Σ U ⊤ = U Σ ⊤ Σ U ⊤ A^{\top}A=V \Sigma^{\top}U^{\top}U\Sigma V^{\top}=V\Sigma^{\top}\Sigma V^{\top}\\ AA^{\top}=U \Sigma^{\top}V^{\top}V\Sigma U^{\top}=U\Sigma^{\top}\Sigma U^{\top}\\ A⊤A=VΣ⊤U⊤UΣV⊤=VΣ⊤ΣV⊤AA⊤=UΣ⊤V⊤VΣU⊤=UΣ⊤ΣU⊤
由于 A ⊤ A A A ⊤ A^{\top}A \quad AA^{\top} A⊤AAA⊤都是对称矩阵
( A A ⊤ ) ⊤ = A A ⊤ ( A ⊤ A ) ⊤ = A ⊤ A (AA^{\top})^{\top} =AA^{\top}\\ (A^{\top}A)^{\top} =A^{\top}A (AA⊤)⊤=AA⊤(A⊤A)⊤=A⊤A
不严谨的说,它们可以分解为 S Λ S ⊤ S\Lambda S^{\top} SΛS⊤的形式。
因此求解 U V Σ U\quad V\quad \Sigma UVΣ变为了求解 A A ⊤ A ⊤ A AA^{\top}\quad A^{\top}A AA⊤A⊤A的特征值和特征向量。
2. 举例子
上面的符号描述还是太抽象了,我们举例子。
2.1 案例1
A = [ 4 4 − 3 3 ] A=\begin{bmatrix} 4 & 4 \\ -3 & 3 \end{bmatrix} A=[4−343]
A A A的转置
A ⊤ = [ 4 − 3 4 3 ] A^{\top}=\begin{bmatrix} 4 & -3 \\ 4 & 3 \\ \end{bmatrix} A⊤=[44−33]
A A ⊤ = [ 32 0 0 18 ] AA^{\top}=\begin{bmatrix} 32 & 0\\ 0 & 18\\ \end{bmatrix} AA⊤=[320018]
λ 1 = 32 M 1 = A A ⊤ − λ 1 I = [ 0 0 0 − 14 ] M 1 [ 1 0 ] = [ 0 0 ] \lambda_1=32\\ M_1=AA^{\top}-\lambda_1 I=\\ \begin{bmatrix} 0 & 0 \\ 0 & -14 \end{bmatrix}\\ M_1\begin{bmatrix} 1\\0 \end{bmatrix}=\begin{bmatrix} 0 \\ 0 \end{bmatrix} λ1=32M1=AA⊤−λ1I=[000−14]M1[10]=[00]
因此 A A ⊤ AA^{\top} AA⊤的一个特征向量为
u 1 → = [ 1 0 ] \overrightarrow{u_1}=\begin{bmatrix} 1\\0 \end{bmatrix} u1=[10]
同理
λ 2 = 18 M 2 = A A ⊤ − λ 2 I = [ 14 0 0 0 ] M 2 [ 0 1 ] = [ 0 0 ] \lambda_2=18\\ M_2=AA^{\top}-\lambda_2 I=\\ \begin{bmatrix} 14 & 0 \\ 0 & 0 \end{bmatrix}\\ M_2\begin{bmatrix} 0 \\ 1 \end{bmatrix}=\begin{bmatrix} 0 \\ 0 \end{bmatrix} λ2=18M2=AA⊤−λ2I=[14000]M2[01]=[00]
因此 A A ⊤ AA^{\top} AA⊤的另一个特征向量为
u 2 → = [ 0 1 ] \overrightarrow{u_2}= \begin{bmatrix} 0 \\ 1 \end{bmatrix} u2=[01]
因此我们可以得到矩阵 U U U
U = [ 1 0 0 1 ] U=\begin{bmatrix} 1 & 0\\ 0 & 1\\ \end{bmatrix} U=[1001]
另一方面
A ⊤ A = [ 25 7 7 25 ] A^{\top}A=\begin{bmatrix} 25 & 7 \\ 7 & 25 \end{bmatrix} A⊤A=[257725]
同理我们可以求得
( 25 − λ ) ( 25 − λ ) − 49 = 0 ( λ − 32 ) ( λ − 18 ) = 0 λ 1 = 32 λ 2 = 18 (25-\lambda)(25-\lambda)-49=0\\ (\lambda-32)(\lambda-18)=0\\ \lambda_1=32\quad \lambda_2=18 (25−λ)(25−λ)−49=0(λ−32)(λ−18)=0λ1=32λ2=18
对应的
M 1 ′ = A ⊤ A − λ 1 I = [ − 7 7 7 − 7 ] M 1 ′ [ 1 1 ] = 0 M_1'=A^{\top}A-\lambda_1I= \begin{bmatrix} -7 & 7\\ 7 & -7 \end{bmatrix}\\ M_1'\begin{bmatrix}1\\1\end{bmatrix}=0 M1′=A⊤A−λ1I=[−777−7]M1′[11]=0
因此 A ⊤ A A^{\top}A A⊤A的一个特征向量单位化后
v 1 → = 2 2 [ 1 1 ] \overrightarrow{v_1}=\frac{\sqrt{2}}{2}\begin{bmatrix} 1 \\1 \end{bmatrix} v1=22[11]
同理
M 2 ′ = A ⊤ A − λ 2 I = [ 7 7 7 7 ] M 2 ′ [ 1 − 1 ] = [ 0 0 ] M_2'=A^{\top}A-\lambda_2I=\begin{bmatrix}7 & 7\\7 & 7 \end{bmatrix}\\ M_2'\begin{bmatrix}1 \\ -1 \end{bmatrix}=\begin{bmatrix}0\\0\end{bmatrix} M2′=A⊤A−λ2I=[7777]M2′[1−1]=[00]
A ⊤ A A^{\top}A A⊤A的另一个特征向量单位化后
v 2 → = 2 2 [ 1 − 1 ] \overrightarrow{v_2}=\frac{\sqrt{2}}{2}\begin{bmatrix} 1\\ -1 \end{bmatrix} v2=22[1−1]
因此得到矩阵 V V V
V = [ 2 2 2 2 2 2 − 2 2 ] V= \begin{bmatrix} \frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}\\ \frac{\sqrt{2}}{2} & -\frac{\sqrt{2}}{2}\\ \end{bmatrix} V=[222222−22]
又有 σ 2 = λ \sigma^2=\lambda σ2=λ
那么 Σ \Sigma Σ矩阵为
Σ = [ 4 2 0 0 3 2 ] \Sigma=\begin{bmatrix} 4\sqrt{2} & 0\\ 0 & 3\sqrt{2} \end{bmatrix} Σ=[420032]
最终分解形式为
A = U Σ V ⊤ = [ 1 0 0 1 ] [ 4 2 0 0 3 2 ] [ 2 2 2 2 2 2 − 2 2 ] A=U\Sigma V^{\top}= \begin{bmatrix} 1 & 0\\ 0 & 1\\ \end{bmatrix} \begin{bmatrix} 4\sqrt{2} & 0\\ 0 & 3\sqrt{2} \end{bmatrix} \begin{bmatrix} \frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}\\ \frac{\sqrt{2}}{2} & -\frac{\sqrt{2}}{2}\\ \end{bmatrix} A=UΣV⊤=[1001][420032][222222−22]
我们验算后发现,右边符号不对劲;得到的矩阵为
[ 4 4 3 − 3 ] \begin{bmatrix}4 & 4\\ 3 & -3\\ \end{bmatrix} [434−3]
因此上面有一步错误
验证
A v 1 → = [ 4 4 − 3 3 ] [ 2 2 2 2 ] = [ 4 2 0 ] = σ 1 v 1 → A v 2 → = [ 4 4 − 3 3 ] [ 2 2 − 2 2 ] = [ 0 − 3 2 ] ≠ σ 2 v 2 → A\overrightarrow{v_1}= \begin{bmatrix} 4 & 4 \\ -3 & 3 \end{bmatrix} \begin{bmatrix} \frac{\sqrt{2}}{2}\\ \frac{\sqrt{2}}{2} \end{bmatrix}= \begin{bmatrix} 4\sqrt{2}\\0 \end{bmatrix}=\sigma_1\overrightarrow{v_1}\\ A\overrightarrow{v_2}= \begin{bmatrix} 4 & 4 \\ -3 & 3 \end{bmatrix} \begin{bmatrix} \frac{\sqrt{2}}{2}\\ -\frac{\sqrt{2}}{2} \end{bmatrix}= \begin{bmatrix} 0\\-3\sqrt{2} \end{bmatrix}\ne\sigma_2\overrightarrow{v_2}\\ Av1=[4−343][2222]=[420]=σ1v1Av2=[4−343][22−22]=[0−32]=σ2v2
因此 v 2 → ≠ [ 2 2 − 2 2 ] \overrightarrow{v_2} \ne \begin{bmatrix}\frac{\sqrt{2}}{2}\\-\frac{\sqrt{2}}{2}\end{bmatrix} v2=[22−22],我们符号换下下就好了。
v 2 → = [ − 2 2 2 2 ] \overrightarrow{v_2}= \begin{bmatrix} -\frac{\sqrt{2}}{2}\\\frac{\sqrt{2}}{2} \end{bmatrix} v2=[−2222]
最终 A A A的奇异值分解形式为
A = [ 1 0 0 1 ] [ 4 2 0 0 3 2 ] [ 2 2 2 2 − 2 2 2 2 ] A=\begin{bmatrix} 1 & 0\\ 0 & 1\\ \end{bmatrix} \begin{bmatrix} 4\sqrt{2} & 0\\ 0 & 3\sqrt{2} \end{bmatrix} \begin{bmatrix} \frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}\\ -\frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}\\ \end{bmatrix} A=[1001][420032][22−222222]
变成秩1矩阵相乘相加的形式为
A = 4 2 [ 1 0 ] [ 2 2 2 2 ] + 3 2 [ 0 1 ] [ − 2 2 2 2 ] A=4\sqrt{2} \begin{bmatrix}1\\0\end{bmatrix}\begin{bmatrix}\frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}\end{bmatrix}+3\sqrt{2}\begin{bmatrix}0 \\ 1\end{bmatrix}\begin{bmatrix}-\frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}\end{bmatrix} A=42[10][2222]+32[01][−2222]
2.2 案例2
过程就省略一些了
A = [ 1 0 − 1 0 1 0 ] A ⊤ = [ 1 0 0 1 − 1 0 ] A=\begin{bmatrix} 1 & 0 & -1 \\ 0 & 1 & 0 \end{bmatrix}\\ A^{\top}=\begin{bmatrix} 1 & 0\\0 & 1\\-1 & 0 \end{bmatrix} A=[1001−10]A⊤= 10−1010
A ⊤ A = [ 1 0 − 1 0 1 0 − 1 0 1 ] λ 1 = 2 , λ 1 = 1 , λ 3 = 0 v 1 = [ 2 2 0 − 2 2 ] v 2 = [ 0 1 0 ] v 3 = [ 2 2 0 2 2 ] A^{\top}A=\begin{bmatrix} 1 & 0 & -1 \\ 0 & 1 & 0\\ -1 & 0 & 1 \end{bmatrix}\\ \lambda_1=2,\lambda_1=1,\lambda_3=0\\ v_1=\begin{bmatrix} \frac{\sqrt{2}}{2}\\ 0\\ -\frac{\sqrt{2}}{2}\\ \end{bmatrix} v_2=\begin{bmatrix} 0 \\ 1 \\ 0 \end{bmatrix} v_3 = \begin{bmatrix} \frac{\sqrt{2}}{2}\\0 \\ \frac{\sqrt{2}}{2} \end{bmatrix} A⊤A= 10−1010−101 λ1=2,λ1=1,λ3=0v1= 220−22 v2= 010 v3= 22022
因此
V = [ 2 2 0 2 2 0 1 0 − 2 2 0 2 2 ] V=\begin{bmatrix} \frac{\sqrt{2}}{2} & 0 & \frac{\sqrt{2}}{2}\\ 0 & 1 & 0\\ -\frac{\sqrt{2}}{2} & 0 & \frac{\sqrt{2}}{2} \end{bmatrix} V= 220−2201022022
同理
A A ⊤ = [ 2 0 0 1 ] λ 1 = 2 , λ 2 = 1 u 1 = [ 1 0 ] u 2 = [ 0 1 ] AA^{\top}=\begin{bmatrix} 2 & 0\\ 0 & 1 \end{bmatrix}\\ \lambda_1= 2, \lambda_2=1\\ u_1=\begin{bmatrix} 1 \\0 \end{bmatrix} u_2=\begin{bmatrix} 0 \\ 1 \end{bmatrix} AA⊤=[2001]λ1=2,λ2=1u1=[10]u2=[01]
因此
U = [ 1 0 0 1 ] U=\begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} U=[1001]
最终 A A A的奇异值分解为
A = U Σ V ⊤ = [ 1 0 0 1 ] [ 2 0 0 0 1 0 ] [ 2 2 0 − 2 2 0 1 0 2 2 0 2 2 ] A=U\Sigma V^{\top}\\= \begin{bmatrix} 1 & 0\\ 0 & 1 \end{bmatrix} \begin{bmatrix} \sqrt{2} & 0 & 0\\ 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} \frac{\sqrt{2}}{2} & 0 & -\frac{\sqrt{2}}{2}\\ 0 & 1 & 0\\ \frac{\sqrt{2}}{2} & 0 & \frac{\sqrt{2}}{2} \end{bmatrix} A=UΣV⊤=[1001][200100] 22022010−22022
变成秩1矩阵相乘相加的形式为
A = 2 [ 1 0 ] [ 2 2 0 2 2 ] + 1 [ 0 1 ] [ 0 1 0 ] A=\sqrt{2} \begin{bmatrix}1\\0\end{bmatrix}\begin{bmatrix}\frac{\sqrt{2}}{2} & 0 & \frac{\sqrt{2}}{2}\end{bmatrix}+ 1\begin{bmatrix}0 \\ 1\end{bmatrix}\begin{bmatrix}0 & 1 & 0\end{bmatrix} A=2[10][22022]+1[01][010]
2.3 案例3
A = [ 1 − 2 0 0 − 2 1 ] A=\begin{bmatrix} 1 & -2 & 0\\ 0 & -2 & 1 \end{bmatrix} A=[10−2−201]
A ⊤ = [ 1 0 − 2 − 2 0 1 ] A ⊤ A = [ 1 − 2 0 − 2 8 − 2 0 − 2 1 ] λ 1 = 9 , λ 2 = 1 , λ 3 = 0 v 1 = [ 2 6 − 2 2 3 2 6 ] v 2 = [ 2 2 0 − 2 2 ] v 3 = [ 2 3 1 3 2 3 ] A^{\top}=\begin{bmatrix} 1 & 0\\ -2 & -2 \\ 0 & 1 \end{bmatrix}\\ A^{\top}A=\begin{bmatrix} 1 & -2 & 0\\ -2 & 8 & -2\\ 0 & -2 & 1 \end{bmatrix}\\ \lambda_1=9,\lambda_2=1,\lambda_3=0\\ v_1=\begin{bmatrix} \frac{\sqrt{2}}{6} \\ -\frac{2\sqrt{2}}{3}\\\frac{\sqrt{2}}{6} \end{bmatrix} v_2=\begin{bmatrix} \frac{\sqrt{2}}{2} \\ 0 \\ -\frac{\sqrt{2}}{2} \end{bmatrix} v_3=\begin{bmatrix} \frac{2}{3} \\ \frac{1}{3} \\ \frac{2}{3} \end{bmatrix} A⊤= 1−200−21 A⊤A= 1−20−28−20−21 λ1=9,λ2=1,λ3=0v1= 62−32262 v2= 220−22 v3= 323132
因此
V = [ 2 6 2 2 2 3 − 2 2 3 0 1 3 2 6 2 2 2 3 ] V=\begin{bmatrix} \frac{\sqrt{2}}{6} & \frac{\sqrt{2}}{2} & \frac{2}{3}\\ -\frac{2\sqrt{2}}{3} & 0 & \frac{1}{3}\\ \frac{\sqrt{2}}{6} & \frac{\sqrt{2}}{2} & \frac{2}{3} \end{bmatrix} V= 62−3226222022323132
同理
A A ⊤ = [ 5 4 4 5 ] λ 1 = 9 λ 2 = 1 u 1 = [ 2 2 2 2 ] u 2 = [ 2 2 − 2 2 ] AA^{\top}= \begin{bmatrix} 5 & 4 \\4 & 5 \end{bmatrix}\\ \lambda_1=9\ \lambda_2=1\\ u_1=\begin{bmatrix} \frac{\sqrt{2}}{2} \\ \frac{\sqrt{2}}{2} \end{bmatrix}u_2=\begin{bmatrix} \frac{\sqrt{2}}{2} \\ -\frac{\sqrt{2}}{2} \end{bmatrix} AA⊤=[5445]λ1=9 λ2=1u1=[2222]u2=[22−22]
因此
U = [ 2 2 2 2 2 2 − 2 2 ] U =\begin{bmatrix} \frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}\\ \frac{\sqrt{2}}{2} & -\frac{\sqrt{2}}{2} \end{bmatrix} U=[222222−22]
最终 A A A的奇异值分解为
A = U Σ V ⊤ = [ 2 2 2 2 2 2 − 2 2 ] [ 3 0 0 0 1 0 ] [ 2 6 − 2 2 3 2 6 2 2 0 − 2 2 2 3 1 3 2 3 ] A=U\Sigma V^{\top}=\\ \begin{bmatrix} \frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}\\ \frac{\sqrt{2}}{2} & -\frac{\sqrt{2}}{2} \end{bmatrix} \begin{bmatrix} 3 & 0 & 0\\ 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} \frac{\sqrt{2}}{6} & -\frac{2\sqrt{2}}{3} & \frac{\sqrt{2}}{6} \\ \frac{\sqrt{2}}{2} & 0 & -\frac{\sqrt{2}}{2}\\ \frac{2}{3}& \frac{1}{3}& \frac{2}{3} \end{bmatrix} A=UΣV⊤=[222222−22][300100] 622232−32203162−2232
变成秩1矩阵相乘相加的形式为
A = 3 [ 2 2 2 2 ] [ 2 6 − 2 2 3 2 6 ] + 1 [ 2 2 − 2 2 ] [ 2 2 0 − 2 2 ] A=3\begin{bmatrix}\frac{\sqrt{2}}{2} \\ \frac{\sqrt{2}}{2}\end{bmatrix}\begin{bmatrix}\frac{\sqrt{2}}{6} & -\frac{2\sqrt{2}}{3} & \frac{\sqrt{2}}{6}\end{bmatrix}+\\ 1\begin{bmatrix}\frac{\sqrt{2}}{2} \\ -\frac{\sqrt{2}}{2} \end{bmatrix}\begin{bmatrix} \frac{\sqrt{2}}{2} & 0 & -\frac{\sqrt{2}}{2}\\\end{bmatrix} A=3[2222][62−32262]+1[22−22][220−22]
参考
mit_svd
svd_numerical_examples
zhihu-svd
相关文章:
线性代数笔记28--奇异值分解(SVD)
1. 奇异值分解 假设矩阵 A A A有 m m m行 n n n列 奇异值分解就是在 A A A的行向量上选取若干对标准正交基,对它作 A A A矩阵变化并投射到了 A A A的列空间上的正交基的若干倍数。 A v → u → σ u → ∈ R m v → ∈ R n A\overrightarrow{v}\overrightarrow{u…...
【记录一下学习】Embedding 与向量数据库
一、向量数据库 向量数据库(Vector Database),也叫矢量数据库,主要用来存储和处理向量数据。 在数学中,向量是有大小和方向的量,可以使用带箭头的线段表示,箭头指向即为向量的方向,…...
面试准备——云相册项目(1)基础
项目概述 云相册项目旨在为用户提供便捷的照片存储、管理和访问服务。通过客户端与服务器的配合,实现照片的上传、下载以及一些基本的命令交互功能,方便用户在不同设备上随时查看和管理自己的相册。 技术要点 编程语言与环境:使用 C 语言开…...
Redis数据结构深度解析:从String到Stream的奇幻之旅(一)
Redis系列文章 《半小时掌握Redis核心操作:从零开始的实战指南》-CSDN博客 Redis数据结构深度解析:从String到Stream的奇幻之旅(一)-CSDN博客 Redis数据结构深度解析:从String到Stream的奇幻之旅(二&…...
Linux - 网络基础(应用层,传输层)
一、应用层 1)发送接收流程 1. 发送文件 write 函数发送数据到 TCP 套接字时,内容不一定会立即通过网络发送出去。这是因为网络通信涉及多个层次的缓冲和处理,TCP 是一个面向连接的协议,它需要进行一定的排队、确认和重传等处理…...
【Linux-网络】从逻辑寻址到物理传输:解构IP协议与ARP协议的跨层协作
🎬 个人主页:谁在夜里看海. 📖 个人专栏:《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长,行则将至 目录 📚前言 📖 IP地址的组成 🔖IPv4 🔖IPv6 📚…...
解锁前端表单数据的秘密旅程:从后端到用户选择!✨
😄 解锁前端表单数据的秘密旅程:从后端到用户选择!✨ 嘿,技术爱好者们!👋 你有没有在开发中遇到过这样的困惑:表单里的数据(比如图片附件、识别点 ID)从哪儿来的&#x…...
Kotlin字符串操作在Android开发中的应用示例
Kotlin字符串操作在Android开发中的应用示例 引言 在Android开发中,Kotlin已经成为主流的编程语言,它提供了许多便捷的字符串操作功能。本文将结合一个具体的Kotlin示例程序,详细介绍Kotlin中字符串的创建、格式化和使用方法。 示例代码 以…...
【机械视觉】C#+visionPro联合编程———【一、C# + VisionPro 联合编程详解以及如何将visionPro工具加载到winform】
机械视觉与 C# VisionPro 联合编程详解 目录 机械视觉与 C# VisionPro 联合编程详解 概念 应用场景 1. 工业检测与质量控制缺陷检测 2. 定位与机器人引导 3. 识别与分类 4. 复杂流程控制 将visionPro工具加载到winform 环境准备 一、创建winform项目 二、打开窗体…...
迷你世界脚本自定义UI接口:Customui
自定义UI接口:Customui 彼得兔 更新时间: 2024-11-07 15:12:42 具体函数名及描述如下:(除前两个,其余的目前只能在UI编辑器内部的脚本使用) 序号 函数名 函数描述 1 openUIView(...) 打开一个UI界面(注意…...
江科大51单片机笔记【9】DS1302时钟可调时钟(下)
在写代码前,记得把上一节的跳线帽给插回去,不然LCD无法显示 一.DS1302时钟 1.编写DS1302.c文件 (1)重新对端口定义名字 sbit DS1302_SCLKP3^6; sbit DS1302_IOP3^4; sbit DS1302_CEP3^5;(2)初始化 因为…...
发行思考:全球热销榜的频繁变动
几点杂感: 1、单机游戏销量与在线人数的衰退是剧烈的,有明显的周期性,而在线游戏则稳定很多。 如去年的某明星游戏,最高200多万在线,如今在线人数是48名,3万多。 而近期热门的是MH,在线人数8…...
微信小程序接入deepseek
先上效果 话不多说,直接上代码(本人用的hbuilder Xuniapp) <template><view class"container"><!-- 聊天内容区域 --><scroll-view class"chat-list" scroll-y :scroll-top"scrollTop":…...
为解决局域网IP、DNS切换的Windows BAT脚本
一、背景 为解决公司普通人员需要切换IP、DNS的情况,于是搞了个windows下的bat脚本,可以对有线网络、无线网络进行切换设置。 脚本内容 echo off title 多网络接口IP切换工具:menu cls echo echo 请选择要配置的网络接口: echo echo 1. 有线网络&am…...
VUE3开发-9、axios前后端跨域问题解决方案
VUE前端解决跨域问题 前端页面需要改写 如果无效,记得重启服务器 后端c#解决跨域问题 前端js取值,后端c#跨域_c# js跨域-CSDN博客...
【计算机网络】计算机网络的性能指标——时延、时延带宽积、往返时延、信道利用率
计算机网络的性能指标 导读 大家好,很高兴又和大家见面啦!!! 在上一篇内容中我们介绍了计算机网络的三个性能指标——速率、带宽和吞吐量。用大白话来说就是:网速、最高网速和实时网速。 相信大家看到这三个词应该就…...
Kubermetes 部署mysql pod
步骤 1: 创建 PersistentVolume 和 PersistentVolumeClaim 首先为 MySQL 创建一个 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 来确保数据的持久性。 mysql-pv.yaml: apiVersion: v1 kind: PersistentVolume metadata:name: mysql-pv-volume spec:cap…...
Docker和DockerCompose基础教程及安装教程
Docker的应用场景 Web 应用的自动化打包和发布。自动化测试和持续集成、发布。在服务型环境中部署和调整数据库或其他的后台应用。从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。 CentOS Docker 安装 使用官方安装脚本自动安装 安装命令…...
网络安全等级保护—定级
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 网络安全等级保护五个保护等级 五个保护等级 受侵害的客体 对客体的侵害程度 一般损害 严重损害 特别严重损害 公民、法人和其他组织的合法权益 第一级 第二级 …...
服务器数据恢复—raid5阵列中硬盘出现坏道的数据恢复流程
服务器故障情况: 某公司一台服务器中有一组多块硬盘组成的磁盘阵列。磁盘阵列中有2块硬盘出现故障离线,服务器崩溃,上层数据丢失。 硬件检测: 硬件工程师对客户服务器内的所有硬盘进行物理故障检测,最终确认这2块硬盘…...
macos 程序 运行
sudo xattr -r -d com.apple.quarantine [/Applications/Name]使用stow 管理配置文件...
UVC for USBCamera in Android
基于UVC 协议,完成USBCamera 开发 文章目录 一、目的:二、USBCamera 技术实现方案难点 三、误区:四、基础补充、资源参考架构图了解Camera相关专栏零散知识了解部分相机源码参考,学习API使用,梳理流程,偏应…...
Docker 安装 Nacos 2.1.1(单机版)
一、拉取镜像 docker pull nacos/nacos-server:v2.1.1 二、新建数据库 官网上下载 对应版本的 nacos zip 包,在 nacos\conf 目录下有 mysql脚本: 新建一个数据库 nacos_config,在数据库中依次执行 nacos-mysql.sql、1.4.0-ipv6_support-up…...
网络安全数据富化 网络数据安全处理规范
本文件规定了网络运营者开展网络数据收集、存储、使用、加工、传输、提供、公开等数据处理的安全 技术与管理要求。 本文件适用于网络运营者规范网络数据处理,以及监管部门、第三方评估机构对网络数据处理进行 监督管理和评估。 部分术语和定义 数据(data&#x…...
深入理解 C 语言函数的定义
在 C 语言的编程世界里,函数是构建复杂程序的基石。理解函数的定义与运用,对于编写高效、可维护的代码至关重要。 函数定义的基本概念 函数是一组执行特定任务的代码块。它将一个复杂的问题分解为一个个小的、可管理的部分,提高了代码的…...
SQL注入练习场:PHPStudy+SQLI-LABS靶场搭建教程(零基础友好版)
注意:文中涉及演示均为模拟测试,切勿用于真实环境,任何未授权测试都是违法行为! 一、环境准备 下载PHPStudy 官网下载地址:https://www.xp.cn/php-study(选择Windows版) 安装时建议选择自定…...
最好用的多语言插件Google Language Translator
Google Language Translator 是一款用于 WordPress 的翻译插件,可以帮助网站快速实现多语言支持。以下是关于该插件的详细介绍: 功能特点 免费与付费版本 免费版本使用 Google Translate 的短语基础机器翻译,能够快速将网站内容翻译成多种…...
计算机组成原理笔记(一)——1.1电子计算机与存储程序控制
电子计算机是一种不需要人工直接干预,能够自动、高速、准确地对各种信息进行处理和存储的电子设备。电子计算机从总体上来说可以分为两大类:电子模拟计算机和电子数字计算机。电子模拟计算机中处理的信息是连续变化的物理量,运算的过程也是连续的;而电子…...
5人3小时复刻Manus?开源OpenManus项目全解剖,我的DeepSeek股票报告这样诞生
大家好,我是大 F,深耕AI算法十余年,互联网大厂技术岗。分享AI算法干货、技术心得。 更多文章可关注《大模型理论和实战》、《DeepSeek技术解析和实战》,一起探索技术的无限可能! OpenManus是什么 1. 项目背景 OpenManus 是由 MetaGPT 核心团队仅用 3 小时复刻而成的开源…...
WordPress报502错误问题解决-php-fpm-84.service loaded failed failed LSB: starts php-fpm
文章目录 问题描述问题排查问题解决 问题描述 服务器环境: php:8.4MySQL:8.0Nginx:1.26.2 在访问站点时,一直报502,而两天前还能正常访问。 问题排查 导致502的问题很多,比如站点访问量太大…...
