PCA(主成分分析)是降维中最经典的方法,其推导求解的常用两种方法包括最大方差理论(样本点到超平面的投影都尽可能分开)以及最小平方误差理论(样本点到超平面的距离都足够近),以上两种方法都需要进行严格意义上的数学推导,而本文想从另一个角度——相似矩阵的几何意义——直观理解PCA的原理。

1. 相似矩阵的几何意义

以三维向量空间为例,任何一个向量都可以用一组基向量的某个线性组合表示:v⃗=a1e1+a2e2+a3e3=a1′e1′+a2′e2′+a3′e3′\vec{v}=a_{1}e_{1}+a_{2}e_{2}+a_{3}e_{3}=a_{1}^{'}e_{1}^{'}+a_{2}^{'}e_{2}^{'}+a_{3}^{'}e^{'}_{3}v=a1​e1​+a2​e2​+a3​e3​=a1′​e1′​+a2′​e2′​+a3′​e3′​, e1,e2,e3与e1′,e2′,e3′e_{1},e_{2},e_{3}与e_{1}^{'},e^{'}_{2},e^{'}_{3}e1​,e2​,e3​与e1′​,e2′​,e3′​是三维空间的两组不同基向量,而两组不同基向量间可通过坐标变换实现相互转化:
v⃗=(e1′,e2′,e3′)(a1′a2′a3′)=(e1,e2,e3)(w11w12w13w21w22w23w31w32w33)(a1′a2′a3′)=(e1,e2,e3)(a1a2a3)\vec{v}=\begin{pmatrix}e_{1}^{'},e^{'}_{2},e^{'}_{3}\end{pmatrix}\begin{pmatrix}a_{1}^{'}\\ a_{2}^{'}\\a_{3}^{'}\end{pmatrix}= \begin{pmatrix}e_{1},e_{2},e_{3}\end{pmatrix} \begin{pmatrix} w_{11}& w_{12} &w_{13} \\ w_{21} & w_{22}&w_{23} \\ w_{31} &w_{32}&w_{33} \end{pmatrix}\begin{pmatrix}a_{1}^{'}\\ a^{'}_{2}\\a^{'}_{3}\end{pmatrix}= \begin{pmatrix}e_{1},e_{2},e_{3}\end{pmatrix}\begin{pmatrix}a_{1}\\ a_{2}\\a_{3}\end{pmatrix} v=(e1′​,e2′​,e3′​​)⎝⎛​a1′​a2′​a3′​​⎠⎞​=(e1​,e2​,e3​​)⎝⎛​w11​w21​w31​​w12​w22​w32​​w13​w23​w33​​⎠⎞​⎝⎛​a1′​a2′​a3′​​⎠⎞​=(e1​,e2​,e3​​)⎝⎛​a1​a2​a3​​⎠⎞​
e1,e2,e3与e1′,e2′,e3′e_{1},e_{2},e_{3}与e_{1}^{'},e^{'}_{2},e^{'}_{3}e1​,e2​,e3​与e1′​,e2′​,e3′​之间的坐标变换由W3×3=(w11w12w13w21w22w23w31w32w33)W_{3×3}= \begin{pmatrix}w_{11}& w_{12} &w_{13} \\ w_{21} & w_{22}&w_{23} \\w_{31} &w_{32}&w_{33} \end{pmatrix}W3×3​=⎝⎛​w11​w21​w31​​w12​w22​w32​​w13​w23​w33​​⎠⎞​表示,为保证每组基向量线性无关,W3×3W_{3×3}W3×3​矩阵必须为可逆矩阵(行列式>0)(坐标变换是一种不改变原线性空间维度的特殊线性变换),因此有(e1′,e2′,e3′)=(e1,e2,e3)W3×3,(a1′a2′a3′)=W3×3−1(a1a2a3)(e_{1}^{'},e^{'}_{2},e^{'}_{3})=(e_{1},e_{2},e_{3})W_{3×3},\begin{pmatrix}a_{1}^{'}\\ a_{2}^{'}\\a^{'}_{3}\end{pmatrix}=W_{3×3}^{-1}\begin{pmatrix}a_{1}\\ a_{2}\\a_{3}\end{pmatrix}(e1′​,e2′​,e3′​)=(e1​,e2​,e3​)W3×3​,⎝⎛​a1′​a2′​a3′​​⎠⎞​=W3×3−1​⎝⎛​a1​a2​a3​​⎠⎞​。

线性空间中,相同的向量可由不同基向量的某个线性组合表示,那么相同的线性变换也可由不同基向量下的唯一不同矩阵表示,如对向量v⃗\vec{v}v进行某个线性空间变换LLL,即v⃗→L(v⃗)\vec{v}\rightarrow L(\vec{v})v→L(v):
L(v⃗)=a1L(e1)+a2L(e2)+a3L(e3)=(L(e1),L(e2),L(e3))(a1a2a3)=(e1,e2,e3)(l11l12l13l21l22l23l31l32l33)(a1a2a3)=(e1′,e2′,e3′)(l11′l12′l13′l21′l22′l23′l31′l32′l33′)(a1′a2′a3′)=(e1,e2,e3)W3×3(l11′l12′l13′l21′l22′l23′l31′l32′l33′)W3×3−1(a1a2a3)\begin{aligned} L(\vec{v})&=a_{1}L(e_{1})+a_{2}L(e_{2})+a_{3}L(e_{3})=\begin{pmatrix}L(e_{1}), L(e_{2}),L(e_{3})\end{pmatrix} \begin{pmatrix}a_{1}\\ a_{2}\\a_{3}\end{pmatrix} =\begin{pmatrix}e_{1},e_{2},e_{3}\end{pmatrix} \begin{pmatrix} l_{11}& l_{12} &l_{13} \\ l_{21} & l_{22}&l_{23} \\ l_{31} & l_{32}&l_{33} \end{pmatrix}\begin{pmatrix}a_{1}\\ a_{2}\\a_{3}\end{pmatrix} \\ &=\begin{pmatrix}e_{1}^{'},e^{'}_{2},e^{'}_{3}\end{pmatrix} \begin{pmatrix} l_{11}^{'}& l_{12}^{'} &l_{13}^{'} \\ l_{21} ^{'}& l_{22}^{'}&l_{23}^{'} \\ l_{31}^{'} & l_{32}^{'}&l_{33}^{'} \end{pmatrix}\begin{pmatrix}a_{1}^{'}\\ a_{2}^{'}\\a^{'}_{3}\end{pmatrix}=(e_{1},e_{2},e_{3})W_{3×3}\begin{pmatrix} l_{11}^{'}& l_{12}^{'} &l_{13}^{'} \\ l_{21} ^{'}& l_{22}^{'}&l_{23}^{'} \\ l_{31}^{'} & l_{32}^{'}&l_{33}^{'} \end{pmatrix}W_{3×3}^{-1}\begin{pmatrix}a_{1}\\ a_{2}\\a_{3}\end{pmatrix} \end{aligned} L(v)​=a1​L(e1​)+a2​L(e2​)+a3​L(e3​)=(L(e1​),L(e2​),L(e3​)​)⎝⎛​a1​a2​a3​​⎠⎞​=(e1​,e2​,e3​​)⎝⎛​l11​l21​l31​​l12​l22​l32​​l13​l23​l33​​⎠⎞​⎝⎛​a1​a2​a3​​⎠⎞​=(e1′​,e2′​,e3′​​)⎝⎛​l11′​l21′​l31′​​l12′​l22′​l32′​​l13′​l23′​l33′​​⎠⎞​⎝⎛​a1′​a2′​a3′​​⎠⎞​=(e1​,e2​,e3​)W3×3​⎝⎛​l11′​l21′​l31′​​l12′​l22′​l32′​​l13′​l23′​l33′​​⎠⎞​W3×3−1​⎝⎛​a1​a2​a3​​⎠⎞​​
令L3×3=(l11l12l13l21l22l23l31l32l33)L_{3×3}= \begin{pmatrix}l_{11}& l_{12} &l_{13} \\ l_{21} &l_{22}&l_{23} \\ l_{31} &l_{32}&l_{33} \end{pmatrix}L3×3​=⎝⎛​l11​l21​l31​​l12​l22​l32​​l13​l23​l33​​⎠⎞​,L3×3′=(l11′l12′l13′l21′l22′l23′l31′l32′l33′)L^{'}_{3×3}= \begin{pmatrix}l_{11}^{'}& l_{12}^{'} &l_{13}^{'} \\ l_{21}^{'} &l_{22}^{'}&l_{23}^{'} \\ l_{31}^{'} &l_{32}^{'}&l_{33}^{'} \end{pmatrix}L3×3′​=⎝⎛​l11′​l21′​l31′​​l12′​l22′​l32′​​l13′​l23′​l33′​​⎠⎞​,L3×3与L3×3′L_{3×3}与L^{'}_{3×3}L3×3​与L3×3′​分别为相同的线性变换LLL在不同基底e1,e2,e3e_{1},e_{2},e_{3}e1​,e2​,e3​与e1′,e2′,e3′e_{1}^{'},e^{'}_{2},e^{'}_{3}e1′​,e2′​,e3′​的表示矩阵,且满足L3×3′=W3×3−1L3×3W3×3L^{'}_{3×3}=W_{3×3}^{-1}L_{3×3}W_{3×3}L3×3′​=W3×3−1​L3×3​W3×3​,我们就说L3×3与L3×3′L_{3×3}与 L^{'}_{3×3}L3×3​与L3×3′​相似。

可见矩阵的本质是一种线性变换,同一个线性变换在不同坐标基底的表示矩阵是相似矩阵。而在描述同一个线性变换的不同基底中,有一类基底较特殊,用此类基底可将该线性变换的表示矩阵对角化,对角矩阵的几何意义为仅对基向量做缩放,而不改变其方向。
L(v⃗)=(e1′,e2′,e3′)(λ1000λ2000λ3)(a1′a2′a3′)=(λ1e1,λ2e2,λ3e3)(a1′a2′a3′)L(\vec{v})=\begin{pmatrix}e_{1}^{'},e^{'}_{2},e^{'}_{3}\end{pmatrix} \begin{pmatrix} \lambda _{1} & 0&0 \\ 0& \lambda _{2} &0 \\ 0& 0 &\lambda _{3} \end{pmatrix}\begin{pmatrix}a_{1}^{'}\\ a_{2}^{'}\\a^{'}_{3}\end{pmatrix}=(\lambda _{1} e_{1},\lambda _{2} e_{2},\lambda _{3} e_{3})\begin{pmatrix}a_{1}^{'}\\ a_{2}^{'}\\a^{'}_{3}\end{pmatrix} L(v)=(e1′​,e2′​,e3′​​)⎝⎛​λ1​00​0λ2​0​00λ3​​⎠⎞​⎝⎛​a1′​a2′​a3′​​⎠⎞​=(λ1​e1​,λ2​e2​,λ3​e3​)⎝⎛​a1′​a2′​a3′​​⎠⎞​
那如何求这类特殊基向量以及相应的对角元素呢?根据上述公式L3×3′=W3×3−1L3×3W3×3→W3×3L3×3′=L3×3W3×3L^{'}_{3×3}=W_{3×3}^{-1}L_{3×3}W_{3×3}\rightarrow W_{3×3}L^{'}_{3×3}=L_{3×3}W_{3×3}L3×3′​=W3×3−1​L3×3​W3×3​→W3×3​L3×3′​=L3×3​W3×3​,这里L3×3′L^{'}_{3×3}L3×3′​是特殊基底下的对角矩阵,L3×3L_{3×3}L3×3​是单位矩阵I3I_{3}I3​基底下的非对角矩阵,则有:
W3×3L3×3′=(w11w12w13w21w22w23w31w32w33)(λ1000λ2000λ3)=(l11l12l13l21l22l23l31l32l33)(w11w12w13w21w22w23w31w32w33)=L3×3W3×3W_{3×3}L^{'}_{3×3}= \begin{pmatrix} w_{11}& w_{12} &w_{13} \\ w_{21} & w_{22}&w_{23} \\ w_{31} &w_{32}&w_{33} \end{pmatrix}\begin{pmatrix} \lambda _{1} & 0&0 \\ 0& \lambda _{2} &0 \\ 0& 0 &\lambda _{3} \end{pmatrix}=\begin{pmatrix} l_{11}& l_{12} &l_{13} \\ l_{21} & l_{22}&l_{23} \\ l_{31} & l_{32}&l_{33} \end{pmatrix} \begin{pmatrix} w_{11}& w_{12} &w_{13} \\ w_{21} & w_{22}&w_{23} \\ w_{31} &w_{32}&w_{33} \end{pmatrix}=L_{3×3}W_{3×3} W3×3​L3×3′​=⎝⎛​w11​w21​w31​​w12​w22​w32​​w13​w23​w33​​⎠⎞​⎝⎛​λ1​00​0λ2​0​00λ3​​⎠⎞​=⎝⎛​l11​l21​l31​​l12​l22​l32​​l13​l23​l33​​⎠⎞​⎝⎛​w11​w21​w31​​w12​w22​w32​​w13​w23​w33​​⎠⎞​=L3×3​W3×3​
令wj=(w1jw2jw3j)Tw_{j}=\begin{pmatrix}w_{1j}& w_{2j}& w_{3j}\end{pmatrix}^{T}wj​=(w1j​​w2j​​w3j​​)T,可以得到L3×3wj=λjwjL_{3×3}w_{j}=\lambda _{j} w_{j}L3×3​wj​=λj​wj​,不难发现λj\lambda _{j}λj​为矩阵L3×3L_{3×3}L3×3​的其中一个特征值,非零向量wjw_{j}wj​为L3×3L_{3×3}L3×3​对应特征值的特征向量。因此特征向量是进行线性变换(以单位矩阵I3I_{3}I3​为基底的L3×3L_{3×3}L3×3​矩阵表示的线性变换)后方向不变的向量,将这类特征向量作为基底,可将该线性变换的表示矩阵对角化,而特征值则为对应特征向量经过线性变换后的缩放比例。通过求解L3×3L_{3×3}L3×3​矩阵对应的特征值和特征向量,让同样的线性变换通过简洁的对角矩阵的形式表现出来,对实际应用中的数据降维,特征提取都有深刻的意义。

2. 直观理解PCA的基底选取

PCA的本质就是通过基底变化尽可能大的保留原始样本的有效信息,去掉噪音,与信号处理领域的信噪比类似,我们认为有效信息具有较大方差,噪声具有较小方差,信噪比越大意味着数据的质量越好。

假设用矩阵XXX表示样本集(已中心化处理),每一行包含一个不同的样本αi=(xi1xi2xi3)T\alpha_{i}= \begin{pmatrix}x_{i1}&x_{i2}&x_{i3}\end{pmatrix}^{T}αi​=(xi1​​xi2​​xi3​​)T,每一列对应于样本的一个特征βj=(x1jx2jx3j)T\beta_{j}=\begin{pmatrix}x_{1j}& x_{2j}& x_{3j}\end{pmatrix}^{T}βj​=(x1j​​x2j​​x3j​​)T,那么我们希望某几个列向量的方差尽可能大,即某几个方差较大的特征为有效信息,其余方差较小的特征可当噪声忽略,不同列向量间的协方差尽可能小,即不同特征之间尽可能不相关,信息尽量转移到某几个独立的特征上。

X=(x11x12x13x21x22x23x31x32x33)=(α1Tα2Tα3T)=(β1,β2,β3)X= \begin{pmatrix} x_{11}& x_{12} &x_{13} \\ x_{21} & x_{22}&x_{23} \\ x_{31} & x_{32}&x_{33} \end{pmatrix}= \begin{pmatrix} \alpha_{1} ^{T}\\ \\ \alpha_{2}^{T} \\ \\ \alpha_{3}^{T}\\ \end{pmatrix}= \begin{pmatrix}\beta_{1},& \beta_{2},& \beta _{3}\end{pmatrix} X=⎝⎛​x11​x21​x31​​x12​x22​x32​​x13​x23​x33​​⎠⎞​=⎝⎜⎜⎜⎜⎛​α1T​α2T​α3T​​⎠⎟⎟⎟⎟⎞​=(β1​,​β2​,​β3​​)
那么如何表示列向量的方差与协方差呢,这里我们自然想到XXX的协方差矩阵,这里需要注意的是:协方差矩阵计算的是不同特征之间而非不同样本之间的协方差
CX=1mXTX=(Cov(β1,β1)Cov(β1,β2)Cov(β1,β3)Cov(β2,β1)Cov(β2,β2)Cov(β2,β3)Cov(β3,β1)Cov(β3,β2)Cov(β3,β3))C_{X}=\frac{1}{m}X^{T}X= \begin{pmatrix} Cov( \beta_{1}, \beta_{1})& Cov( \beta_{1}, \beta_{2}) &Cov( \beta_{1}, \beta_{3}) \\ Cov( \beta_{2}, \beta_{1})& Cov( \beta_{2}, \beta_{2}) &Cov( \beta_{2}, \beta_{3}) \\ Cov( \beta_{3}, \beta_{1})& Cov( \beta_{3}, \beta_{2}) &Cov( \beta_{3}, \beta_{3}) \end{pmatrix} CX​=m1​XTX=⎝⎛​Cov(β1​,β1​)Cov(β2​,β1​)Cov(β3​,β1​)​Cov(β1​,β2​)Cov(β2​,β2​)Cov(β3​,β2​)​Cov(β1​,β3​)Cov(β2​,β3​)Cov(β3​,β3​)​⎠⎞​
理想型数据集的协方差矩阵CXC_{X}CX​应满足非对角线元素Cov(βi,βj)Cov( \beta_{i}, \beta_{j})Cov(βi​,βj​)为0(不同列向量间的协方差尽可能小),选取较大的对角线元素Cov(βj,βj)Cov( \beta_{j}, \beta_{j})Cov(βj​,βj​)所对应的列向量如β1、β2\beta_{1}、\beta_{2}β1​、β2​为样本集的有效特征(某几个列向量的方差尽可能大),其他较小的列向量如β3\beta_{3}β3​可当作噪声被忽略,从而实现降维。

而实际数据集各特征之间通常存在相关性,有效信息与噪声杂糅在一起,其协方差矩阵的非对角元素并不为0,因此我们可通过改变坐标基底将实际协方差矩阵所对应的线性变换以理想型的对角矩阵形式表示,因为协方差矩阵是对称矩阵,必可正交对角化,可得如下公式:
CX′=W−1CXW=WTCXW=(λ1000λ2000λ3)C_{X}^{'}=W^{-1}C_{X}W=W^{T}C_{X}W= \begin{pmatrix} \lambda _{1} & 0&0 \\ 0& \lambda _{2} &0 \\ 0& 0 &\lambda _{3} \end{pmatrix} CX′​=W−1CX​W=WTCX​W=⎝⎛​λ1​00​0λ2​0​00λ3​​⎠⎞​
由相似矩阵的几何知识可知:

  • CXC_{X}CX​是线性变换LLL在基底(e1,e2,e3)\begin{pmatrix}e_{1}, e_{2},e_{3}\end{pmatrix}(e1​,e2​,e3​​)下表示的矩阵,这里的基底为单位矩阵I3I_{3}I3​;
  • CX′C_{X}^{'}CX′​是相同的线性变换LLL在基底(w1,w2,w3)\begin{pmatrix}w_{1}, w_{2},w_{3}\end{pmatrix}(w1​,w2​,w3​​)下表示的矩阵;
  • WWW是从(e1,e2,e3)\begin{pmatrix}e_{1}, e_{2},e_{3}\end{pmatrix}(e1​,e2​,e3​​)到(w1,w2,w3)\begin{pmatrix}w_{1}, w_{2},w_{3}\end{pmatrix}(w1​,w2​,w3​​)的坐标变换 在(e1,e2,e3)\begin{pmatrix}e_{1}, e_{2},e_{3}\end{pmatrix}(e1​,e2​,e3​​)坐标系下表示的矩阵。

为满足CX′C_{X}^{'}CX′​为对角矩阵,需要求出矩阵CXC_{X}CX​的特征值λ\lambdaλ与对应特征向量www,然后我们将特征值从大到小排列,取特征值前2个对应的特征向量ω1,ω2ω_{1},ω_{2}ω1​,ω2​,因为这两个特征向量缩放比例最大,特征的方差也最大,而方差最大的这两个特征已不是对应CXC_{X}CX​的原始数据集特征,而是经过坐标基底变换后对应CX′C^{'}_{X}CX′​的新特征。我们可通过坐标变换αi′=(w1Tαiw2Tαi)\alpha_{i}^{'}=\begin{pmatrix}w_{1} ^{T}\alpha_{i}&w_{2} ^{T}\alpha_{i}\end{pmatrix}αi′​=(w1T​αi​​w2T​αi​​)得到具有新特征的样本集(可由上述坐标变换公式(xi1′xi2′xi3′)=W3×3−1(xi1xi2xi2)=W3×3T(xi1xi2xi2)推出\begin{pmatrix}x_{i1}^{'}\\ x_{i2}^{'}\\x_{i3}^{'}\end{pmatrix}=W_{3×3}^{-1}\begin{pmatrix}x_{i1}\\ x_{i2}\\x_{i2}\end{pmatrix}=W_{3×3}^{T}\begin{pmatrix}x_{i1}\\ x_{i2}\\x_{i2}\end{pmatrix}推出⎝⎛​xi1′​xi2′​xi3′​​⎠⎞​=W3×3−1​⎝⎛​xi1​xi2​xi2​​⎠⎞​=W3×3T​⎝⎛​xi1​xi2​xi2​​⎠⎞​推出),w1Tαiw_{1} ^{T}\alpha_{i}w1T​αi​即为样本的原特征在特征向量方向上的投影,新的特征(投影)方差最大,相当于把原来多个特征进行线性组合从而获得最大的有效信息作为新特征,新的样本集αi′\alpha_{i}^{'}αi′​的特征协方差即为对角矩阵CX′C_{X}^{'}CX′​的子矩阵,提取了有效信息,抛弃了噪音(特征值较小的特征向量方向上的信息)实现了将3维样本降至2维的作用。

用相似矩阵的几何意义直观理解PCA降维方法相关推荐

  1. 《推荐系统学习(二)》PCA降维方法的数学推导

    前言 PCA降维方法将一组数据看成是一个随机变量生成的,通过将这个随机变量投影到待找的基向量上,这个投影后得到的一维随机向量方差最大.这个待找的基向量方向上,能够将投影后的数据最大程度区分开来. 推导 ...

  2. 通俗理解PCA降维作用

    作者 | 黄礼泊,广东工业大学数据挖掘与信息检索实验室(DMIR),机器学习与人工智能,目前研究方向最优化,将最优化理论运用在图像检索.压缩感知生物信号处理等领域. ▌概述   本文主要介绍一种降维方 ...

  3. PCA降维方法及在ATT人脸数据集的应用实例

    本篇博文对AT&T剑桥大学实验室[1]的人脸数据集应用了主成分分析策略, 做了一些可视化处理. 算法原理 假设在 Rn R n R^n空间中有 m m m个点, 我们希望对这些点进行有损压缩, ...

  4. PCA降维方法(一)

    总结了PCA方法的原理, 算法, 模块划分及其相关应用.举例分析了其在HNR数据中的降维效果. 背景 机器学习在现实应用中,遇到的需要训练的属性维数常常是成千上万维的,要满足密采样条件所需的样本数目是 ...

  5. 画出降维后的图片_看了这几张图,让你彻底理解特征降维

    导读:本文用图的形式介绍机器学习中特征降维的基本思想和方法.阅读完本篇文章,您将很容易理解PCA降维的基本思想和方法. 一.为什么要进行特征降维? 在机器学习中,一些数据集的特征数量很多,达到几千维甚 ...

  6. 基于TensorFlow理解三大降维技术:PCA、t-SNE 和自编码器

    ythonista 数据科学家 Elior Cohen 近日在 Medium 上发文解读了最常见的三大降维技术:PCA.t-SNE 和自编码器.为了帮助理解,他还为其中每种相关算法编写了代码(也发布在 ...

  7. ML之DR之PCA:利用PCA对手写数字图片识别数据集进行降维处理(理解PCA)

    ML之DR之PCA:利用PCA对手写数字图片识别数据集进行降维处理(理解PCA) 目录 初步理解PCA 输出结果 核心代码 初步理解PCA #理解PCA:线性相关矩阵秩计算样例 import nump ...

  8. 直观上理解PCA中特征值和特征向量

    很多人都了解PCA算法,但是总很难直观上去想象和理解整个过程,特别是为什么特征向量可以作为一个PCA特征空间变换后的一个基?特征向量和特征值到底怎么理解? 也许很多人查了很多文章和书籍,但是它们几乎没 ...

  9. 降维方法小结和理解:PCA、LDA、MDS、ISOMAP、SNE、T-SNE、AutoEncoder

    PCA:Principle component analysis 主成分分析 百度百科:它是一个线性变换.这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成 ...

最新文章

  1. UI设计培训分享:ui的字体怎么正确设置?
  2. R语言ggplot2可视化:ggplot2可视化两个水平条形图(horizontal)、并设置两个条形图使用共享的X轴、使用类似population pyramid可视化的方式绘制共享X轴的水平条形图
  3. jQuery 1.6 源码学习(六)——core.js[6]之jQuery对象/数组操作相关方法
  4. carbondata 1.1.0安装文档
  5. 信号与信号分解理解总结
  6. CStringArray 字符串数组的使用 以及调试时怎么Dump出其中的内容
  7. 基于FPGA的光口通信开发案例
  8. et al和etc区别
  9. python爬虫爬取图片代码_python爬虫爬取图片的简单代码
  10. KY-RTI分布仿真技术:附录2 大联邦(构建1000个成员的HLA/RTI仿真系统)
  11. 红色警戒常用的快捷键
  12. Triple-Speed Ethernet(tse)FPGA软核MAC测试
  13. MySQL50题-第6-10题
  14. Visio画图(直角坐标系和relu函数)
  15. 群晖3617可以有几个网卡_Nvme pcie千兆有线网卡
  16. so链接及动态加载原理分析
  17. 谷歌钦定的编程语言Kotlin大揭秘
  18. 前端开发规范:JavaScript 规范
  19. robots文件的Crawl-delay是什么意思
  20. 系统开发系列 之MyEclipse创建WebService详细教程和调用教程(spring框架+maven+CXF框架)

热门文章

  1. D触发器中PRN、CLRN区别以及复位电平选择
  2. 度假租赁软件市场现状研究分析与发展前景预测报告
  3. 《任正非正传》 赵凡禹 (这是一本拼凑的书,营养价值不大,仅供了解皮毛和吹水,而且书中有不少明显错误)
  4. 关于inage、awebp等网页中的图片下载
  5. 哈工大深圳计算机学硕读几年,2019往届三跨哈工大(深圳校区)学硕考研经验分享...
  6. 学会编程,能拿高薪?别再被洗脑了
  7. 【git】使用git remote进行仓库迁移
  8. 分枝限界解决0/1背包问题
  9. (附源码)计算机毕业设计SSM基于的服装商城系统
  10. 贾母和贾政的战略之争