【矩阵论】Chapter 6—矩阵分解知识点总结复习(附Python实现)

news2024/11/24 12:05:39

文章目录

    • 1 满秩分解(Full-Rank Factorization)
    • 2 三角分解(Triangular Factorization)
    • 3 正交三角分解(QR Factorization)
    • 4 奇异值分解(SVD)

1 满秩分解(Full-Rank Factorization)

  • 满秩分解定理

    m × n m\times n m×n矩阵 A A A的秩为 r > 0 r>0 r>0,则存在 m × r m\times r m×r矩阵 B B B(列满秩矩阵)和 r × n r\times n r×n矩阵 C C C(行满秩矩阵)使得
    A = B C A=BC A=BC
    并且 r a n k ( B ) = r a n k ( C ) = r rank(B)=rank(C)=r rank(B)=rank(C)=r

    满秩分解不唯一

    定理:设 A A A m × n m\times n m×n矩阵,且 r a n k ( A ) = r rank(A)=r rank(A)=r,存在 m m m阶可逆矩阵 P P P n n n阶可逆矩阵 Q Q Q,使得 A = P [ I r 0 0 0 ] Q A=P\begin{bmatrix}I_r & 0 \\ 0 & 0\end{bmatrix}Q A=P[Ir000]Q

    证明满秩分解定理:

    ∵ [ I r 0 0 0 ] = [ I r 0 ] [ I r 0 ] \because \begin{bmatrix}I_r & 0 \\ 0 & 0\end{bmatrix}=\begin{bmatrix}I_r \\ 0\end{bmatrix}\begin{bmatrix}I_r & 0\end{bmatrix} [Ir000]=[Ir0][Ir0]

    ∴ A = P [ I r 0 ] [ I r 0 ] Q \therefore A=P\begin{bmatrix}I_r \\ 0\end{bmatrix}\begin{bmatrix}I_r & 0\end{bmatrix}Q A=P[Ir0][Ir0]Q

    则令 P [ I r 0 ] = B P\begin{bmatrix}I_r \\ 0\end{bmatrix}=B P[Ir0]=B [ I r 0 ] Q = C \begin{bmatrix}I_r & 0\end{bmatrix}Q=C [Ir0]Q=C,可得到 A = B C A=BC A=BC

    ∵ \because P , C P,C P,C是可逆矩阵, B B B r r r个列是 P P P的前 r r r列; C C C r r r个行是 Q Q Q的前 r r r

    ∴ \therefore r a n k ( B ) = r a n k ( C ) = r rank(B)=rank(C)=r rank(B)=rank(C)=r

  • 满秩分解步骤

    1. A A A m × n m\times n m×n矩阵,首先求 r a n k ( A ) rank(A) rank(A)
    2. A A A j 1 , j 2 , . . . j r j_1,j_2,...j_r j1,j2,...jr列构成 B m × r B_{m\times r} Bm×r
    3. A A AHermite标准型(即行最简行矩阵) H H H的前 r r r行构成矩阵 C r × n C_{r\times n} Cr×n
    4. A = B C A=BC A=BC就是矩阵 A A A的一个满秩分解
  • Python求解满秩分解

    import numpy as np
    from sympy import Matrix
    
    '''
    Full-Rank Factorization
    @params: A Matrix
    @return: F, G Matrix
    '''
    def full_rank(A):
        r = A.rank()
        A_arr1 = np.array(A.tolist())
        # 求解A的最简行阶梯矩阵,要转换成list,再转换成array
        A_rref = np.array(A.rref()[0].tolist())
        k = [] # 存储被选中的列向量的下标
        # 遍历A_rref的行
        for i in range(A_rref.shape[0]):
            # 遍历A_rref的列
            for j in range(A_rref.shape[1]):
                # 遇到1就说明找到了A矩阵的列向量的下标
                # 这些下标的列向量组成F矩阵,然后再找下一行
                if A_rref[i][j] == 1:
                    k.append(j)
                    break
        # 通过选中的列下标,构建F矩阵       
        B = Matrix(A_arr1[:,k])
        # G就是取行最简行矩阵A的前r行构成的矩阵
        C = Matrix(A_rref[:r])
    
        return B, C
    
    if __name__ == "__main__":
        # 表示矩阵A
        A = np.array([[1, 1, 0], [0, 1, 1], [-1, 0, 0], [1, 1, 1]])
        A = Matrix(A)
        B, C = full_rank(A)
        print("B:", B)
        print("C:", C)
    

2 三角分解(Triangular Factorization)

  • L U LU LU分解定义

    如果有一个矩阵 A A A,我们能表示下三角矩阵 L L L和上三角矩阵 U U U的乘积,称为 A A A的三角分解或 L U LU LU分解。

    img

    更进一步,我们希望下三角矩阵的对角元素都为 1 1 1

    img

  • L U LU LU分解定理

    A A A是== n n n阶非奇异矩阵==,则存在唯一的单位下三角矩阵 L L L和上三角矩阵 U U U使得 A = L U A=LU A=LU的充分必要条件是 A A A的所有顺序主子式均非零(这一条件保证了对角线元素非零),即 Δ k ≠ 0 ( k = 1 , . . . , n − 1 ) \Delta_k\neq 0(k=1,...,n-1) Δk=0(k=1,...,n1)

  • L U LU LU分解步骤

    A A A n × n n\times n n×n矩阵

    1. 进行初等行变换(注意:不涉及行交换的初等变换),从第 1 1 1行开始,到第 n n n行结束。将第 i i i行第 i i i列以下的元素全部消为 0 0 0
    2. 这样操作后得到的矩阵即为 U U U
    3. 构造对角线元素全为 1 1 1的单位下三角矩阵 L L L L L L的剩余元素通过构建方程组的形式来求解。
  • Python求解 L U LU LU分解

  • L U LU LU分解的实际意义

    • 解线性方程组

      假设我们有一个线性方程组 A x = b Ax=b Ax=b,其中 A A A是一个非奇异矩阵,而 b b b是一个列向量。通过 L U LU LU分解,我们可以将方程组转化为两个简化的方程组 L y = b Ly=b Ly=b U x = y Ux=y Ux=y,其中 L L L是下三角矩阵, U U U是上三角矩阵。这两个方程组分别易于求解。

      具体:

      首先,通过前代法(forward substitution)解 L y = b Ly=b Ly=b,然后通过回代法(backward substitution)解 U x = y Ux=y Ux=y。这样,我们就得到了方程组的解。

  • L D U LDU LDU分解定理

    A A A是== n n n阶非奇异矩阵==,则存在唯一的单位下三角矩阵 L L L,对角矩阵 D = d i a g ( d 1 , d 2 , . . . , d n ) D=diag(d_1,d_2,...,d_n) D=diag(d1,d2,...,dn)和上三角矩阵 U U U使得 A = L D U A=LDU A=LDU的充分必要条件是 A A A的所有顺序主子式均非零(这一条件保证了对角线元素非零),即 Δ k ≠ 0 ( k = 1 , . . . , n − 1 ) \Delta_k\neq 0(k=1,...,n-1) Δk=0(k=1,...,n1)并且 d 1 = a 11 , d k = Δ k Δ k + 1 , k = 2 , . . . , n d_1=a_{11},d_k=\frac{\Delta _k}{\Delta_{k+1}},k=2,...,n d1=a11,dk=Δk+1Δk,k=2,...,n

  • L D U LDU LDU分解步骤

    A A A n × n n\times n n×n矩阵

    1. 先求 L U LU LU分解
    2. U U U的对角线元素提出来构成对角矩阵 D D D
    3. U U U中的元素 u i j u_{ij} uij除以 d i d_i di,其中 d i d_i di表示第 i i i个对角元素。这样操作得到变换后的 U U U
  • Python求解 L D U LDU LDU分解

    import numpy as np
    from sympy import Matrix
    import pprint
    
    EPSILON = 1e-8
    
    def is_zero(x):
        return abs(x) < EPSILON
    
    def LU(A):
        # 断言A必须是非奇异方阵A
        assert A.rows == A.cols, "Matrix A must be a square matrix"
        assert A.det() != 0, "Matrix A must be a nonsingular matrix"
    
        n = A.rows
    
        U = A
        # 构建出U矩阵
        # 将U转换成list,再转换成array
        U = np.array(U.tolist())
    
        # 遍历U的每一行利用高斯消元法
        for i in range(n):
            # 判断U[i][i]是否为0
            assert not is_zero(U[i][i]), "主元为0,无法进行LU分解"
            # 对i+1行到n行进行消元
            for j in range(i + 1, n):
                # 计算消元因子
                factor = U[j][i] / U[i][i]
                # 对第j行进行消元
                for k in range(i, n):
                    U[j][k] -= factor * U[i][k]
        # 消元后的矩阵U则是最终U矩阵
        U = Matrix(U)
        # 根据LU = A,得到L矩阵
        L = A * U.inv()
        return L, U
    
    def LDU(A):
        L, U = LU(A)
        D = Matrix(np.diag(np.diag(U)))
        U = D.inv() * U
        return L, D, U
    
    if __name__ == '__main__':
        A = np.array([[2, 3, 4], [1, 1, 9], [1, 2, -6]])
        A = Matrix(A)
        '''
        # test LU分解
        L, U = LU(A)
        pprint.pprint("L:")
        pprint.pprint(L)
        pprint.pprint("U:")
        pprint.pprint(U)
        '''
        # test LDU分解
        L, D, U = LDU(A)
        pprint.pprint("L:")
        pprint.pprint(L)
        pprint.pprint("D:")
        pprint.pprint(D)
        pprint.pprint("U:")
        pprint.pprint(U)
    
  • P L U PLU PLU分解

    PLU 分解是将矩阵 A A A分解成一个置换矩阵 P P P、单位下三角矩阵 L L L和上三角矩阵 U U U的乘积,即
    A = P L U A=PLU A=PLU
    之前 L U LU LU分解中限制了行交换,如果不可避免的必须进行行互换,我们就需要进行 P L U PLU PLU分解。

    实际上只需要把 A = L U A = LU A=LU变成 P − 1 A = P − 1 P L U P^{-1}A = P^{-1}PLU P1A=P1PLU就可以了,实际上所有的 A = L U A = LU A=LU都可以写成 P − 1 A = L U P^{-1}A = LU P1A=LU的形式,由于左乘置换矩阵 P − 1 P^{-1} P1是在交换行的顺序,所以由 P − 1 A = P − 1 P L U P^{-1}A = P^{-1}PLU P1A=P1PLU推得适当的交换 A A A的行的顺序,即可将 A A A L U LU LU 分解。当 A A A没有行互换时, P P P就是单位矩阵。

    事实上,所有的方阵都可以写成 P L U PLU PLU 分解的形式,事实上, P L U PLU PLU 分解有很高的数值稳定性,因此实用上是很好用的工具。

    有时为了计算上的方便,会同时间换行与列的顺序,此时会将 A A A 分解成
    A = P L U Q A=PLUQ A=PLUQ
    其中 P P P L L L U U U 同上, Q Q Q 是一个置换矩阵。

3 正交三角分解(QR Factorization)

  • Q R QR QR分解定理

    A A A m × n m\times n m×n实(复)矩阵, m ≥ n m\ge n mn且其 n n n个列向量线性无关,则存在 m m m阶正交(酉)矩阵 Q Q Q n 阶 n阶 n非奇异实(复)上三角矩阵 R R R使得
    A = Q [ R 0 ] A=Q\begin{bmatrix}R \\ 0\end{bmatrix} A=Q[R0]

  • Q R QR QR分解步骤

    A A A 3 × 3 3\times 3 3×3矩阵,即 A = ( α 1 , α 2 , α 3 ) A=(\alpha_1, \alpha_2,\alpha_3) A=(α1,α2,α3)。则:

    1. 正交化: β 1 = α 1 \beta_1=\alpha_1 β1=α1 β 2 = α 2 − k 21 β 1 \beta_2=\alpha_2-k_{21}\beta_1 β2=α2k21β1 β 3 = α 3 − k 31 β 1 − k 32 β 2 \beta_3=\alpha_3-k_{31}\beta_1-k_{32}\beta_2 β3=α3k31β1k32β2,其中 k 21 = < α 2 , β 1 > < β 1 , β 1 > k_{21}=\frac{<\alpha_2,\beta_1>}{<\beta_1,\beta_1>} k21=<β1,β1><α2,β1> k 31 = < α 3 , β 1 > < β 1 , β 1 > k_{31}=\frac{<\alpha_3,\beta_1>}{<\beta_1,\beta_1>} k31=<β1,β1><α3,β1> k 31 = < α 3 , β 2 > < β 2 , β 2 > k_{31}=\frac{<\alpha_3,\beta_2>}{<\beta_2,\beta_2>} k31=<β2,β2><α3,β2>

    2. 单位化得到矩阵 Q Q Q Q = ( β 1 ∣ ∣ β 1 ∣ ∣ , β 2 ∣ ∣ β 2 ∣ ∣ , β 3 ∣ ∣ β 3 ∣ ∣ ) Q=(\frac{\beta_1}{||\beta_1||},\frac{\beta_2}{||\beta_2||},\frac{\beta_3}{||\beta_3||}) Q=(∣∣β1∣∣β1,∣∣β2∣∣β2,∣∣β3∣∣β3)

    3. 计算得到矩阵 R R R
      ( ∣ ∣ β 1 ∣ ∣ ∣ ∣ β 2 ∣ ∣ ∣ ∣ β 3 ∣ ∣ ) ( 1 k 21 k 31 1 k 32 1 ) = ( ∣ ∣ β 1 ∣ ∣ ∣ ∣ β 1 ∣ ∣ × k 21 ∣ ∣ β 1 ∣ ∣ × k 31 ∣ ∣ β 2 ∣ ∣ ∣ ∣ β 2 ∣ ∣ × k 32 ∣ ∣ β 3 ∣ ∣ ) \begin{pmatrix} ||\beta _1|| & & \\ & ||\beta _2|| & \\ & &||\beta _3|| \end{pmatrix}\begin{pmatrix} 1 & k_{21} & k_{31} \\ & 1 & k_{32} \\ & & 1 \end{pmatrix}=\begin{pmatrix} ||\beta _1|| & ||\beta _1||\times k_{21} & ||\beta _1||\times k_{31}\\ & ||\beta _2|| & ||\beta _2||\times k_{32}\\ & & ||\beta _3|| \end{pmatrix} ∣∣β1∣∣∣∣β2∣∣∣∣β3∣∣ 1k211k31k321 = ∣∣β1∣∣∣∣β1∣∣×k21∣∣β2∣∣∣∣β1∣∣×k31∣∣β2∣∣×k32∣∣β3∣∣

    4. 这样, A = Q R A=QR A=QR

  • Python求解 Q R QR QR分解

    常规计算:

    import numpy as np
    import sympy
    from sympy import Matrix
    from sympy import *
    import pprint
    
    
    #正交三角分解(QR)
    a = [[1, 1, -1],
         [-1, 1, 1],
         [1, 1, -1],
         [1, 1, 1]]
     
    # a = [[1,1,-1],
    #                   [1,0,0],
    #                   [0,1,0],
    #                   [0,0,1]]
    A_mat = Matrix(a)#α向量组成的矩阵A
    # A_gs= GramSchmidt(A_mat)
    A_arr = np.array(A_mat)
    L = []
    for i in range(A_mat.shape[1]):
        L.append(A_mat[:,i])
    #求Q
    A_gs = GramSchmidt(L)#α的施密特正交化得到β
    A_gs_norm = GramSchmidt(L,True)#β的单位化得到v
     
    A = []
     
    for i in range(A_mat.shape[1]):
        for j in range(A_mat.shape[0]):
            A.append(A_gs_norm[i][j])#把数排成一行
     
    A_arr = np.array(A)
    A_arr = A_arr.reshape((A_mat.shape[0],A_mat.shape[1]),order = 'F')#用reshape重新排列(‘F’为竖着写)
    #得到最后的Q
    Q = Matrix(A_arr)
     
    #求R
     
    C = []
    for i in range(A_mat.shape[1]):
        for j in range(A_mat.shape[1]):
            if i > j:
                C.append(0)
            elif i == j:
                t = np.array(A_gs[i])
                m = np.dot(t.T,t)
                C.append(sympy.sqrt(m[0][0]))
            else:
                t = np.array(A_mat[:,j])
                x = np.array(A_gs_norm[i])
                n = np.dot(t.T,x)
    #             print(n)
                C.append(n[0][0])
    # C_final为R          
    C_arr = np.array(C)
    # print(C_arr)
    C_arr = C_arr.reshape((A_mat.shape[1],A_mat.shape[1]))
    R = Matrix(C_arr)
    
    pprint.pprint("Q:")
    pprint.pprint(Q)
    pprint.pprint("R:")
    pprint.pprint(R)
    

    调用库函数

    # 求矩阵A的QR分解,保留根号
    Q_, R_ = A_mat.QRdecomposition()
    pprint.pprint("Q_:")
    pprint.pprint(Q_)
    pprint.pprint("R_:")
    pprint.pprint(R_)
    assert Q_ == Q, "Q_ != Q"
    assert R_ == R, "R_ != R"
    

4 奇异值分解(SVD)

  • S V D SVD SVD定理

    A A A m × n m\times n m×n矩阵,且 r a n k ( A ) = r rank(A)=r rank(A)=r,则存在 m m m阶酉矩阵 U U U n n n阶酉矩阵 V V V使得
    A = U [ Σ 0 0 0 ] V H A=U\begin{bmatrix}\Sigma & 0\\ 0 & 0 \end{bmatrix}V^H A=U[Σ000]VH
    其中 Σ = d i a g ( σ 1 , . . . , σ r ) \Sigma=diag(\sigma_1,...,\sigma_r) Σ=diag(σ1,...,σr),且 σ 1 ≥ . . . ≥ σ r > 0 \sigma_1\geq ...\geq \sigma_r>0 σ1...σr>0

    σ \sigma σ A A A的奇异值,具体含义这里不在叙述,但需要记住的是 σ 2 \sigma^2 σ2 A H A A^HA AHA的特征值,也是 A A H AA^H AAH的特征值,且:

    1. A H A A^HA AHA A A H AA^H AAH的特征值均为非负数
    2. A H A A^HA AHA A A H AA^H AAH的非零特征值相同,并且非零特征值的个数(重特征值按重数计算)等于 r a n k ( A ) rank(A) rank(A)

    所以我们求 Σ \Sigma Σ就转换成求这两个矩阵其中一个的特征值。

  • S V D SVD SVD分解步骤

    1. A H A A^HA AHA n n n个特征值,即计算 ∣ λ I − A H A ∣ = 0 |\lambda I-A^HA|=0 λIAHA=0。得到特征值: λ 1 , . . . , λ r , λ r + 1 = 0 , . . . , λ n = 0 \lambda_1,...,\lambda_r,\lambda_{r+1}=0,...,\lambda_n=0 λ1,...,λr,λr+1=0,...,λn=0,其中 r = r a n k ( A ) r=rank(A) r=rank(A)

    2. r r r个奇异值(即非零特征值开根号)从大到小排列组成对角矩阵,再添加额外的 0 0 0构成 Σ m × n \Sigma_{m\times n} Σm×n矩阵。
      Σ m × n = ( λ 1 . . . 0 0 0 0 λ 2 0 0 0 . . . . . . . . . . . . . . . . . . . . . . . . λ r . . . 0 . . . 0 0 0 ) \Sigma_{m\times n}=\begin{pmatrix} \sqrt[]{\lambda _1} & ... & 0&0&0 \\ 0& \sqrt[]{ \lambda _2} & 0 &0&0\\ ...& ... & ... &...&...\\ ...& ... & ... &\sqrt[]{\lambda_r}&...\\ 0& ... & 0 &0&0 \end{pmatrix} Σm×n= λ1 0......0...λ2 .........00......000...λr 000......0

    3. 求特征值: λ 1 , . . . , λ r , λ r + 1 = 0 , . . . , λ n = 0 \lambda_1,...,\lambda_r,\lambda_{r+1}=0,...,\lambda_n=0 λ1,...,λr,λr+1=0,...,λn=0对应的特征向量 ξ 1 , . . . , ξ n \xi_1,...,\xi_n ξ1,...,ξn:当 λ = λ 1 \lambda=\lambda_1 λ=λ1时, ( λ I − A H A ) × ξ 1 = 0 (\lambda I-A^HA)\times \xi_1=0 (λIAHA)×ξ1=0,解得 ξ 1 \xi_1 ξ1,同理,计算其余特征向量。

    4. 因为 ξ 1 , . . . , ξ n \xi_1,...,\xi_n ξ1,...,ξn相互正交,我们还需要进行单位化,得到 v 1 , . . . , v n v_1,...,v_n v1,...,vn,即 v 1 = ξ 1 ∣ ∣ ξ 1 ∣ ∣ , . . . , v n = ξ n ∣ ∣ ξ n ∣ ∣ v_1=\frac{\xi_1}{||\xi_1||},...,v_n=\frac{\xi_n}{||\xi_n||} v1=∣∣ξ1∣∣ξ1,...,vn=∣∣ξn∣∣ξn。则 V = ( v 1 , . . . , v n ) V=(v_1,...,v_n) V=(v1,...,vn)

    5. 根据 A = U m × m Σ m × n V n × n H A=U_{m\times m}\Sigma_{m\times n}V_{n\times n}^H A=Um×mΣm×nVn×nH,可得 U 1 = A V n × n Σ r × n − 1 U_1=AV_{n\times n}\Sigma_{r\times n}^{-1} U1=AVn×nΣr×n1(注意, σ \sigma σ此时为 Σ m × n \Sigma_{m\times n} Σm×n的前 r r r行),易知 U 1 U_1 U1 m × r m\times r m×r的矩阵,我们还需要扩充 U 2 U_2 U2,其为 m × ( m − r ) m\times (m-r) m×(mr)矩阵。

    6. U 1 H U 2 = 0 U_1^HU_2=0 U1HU2=0,取 U 2 U_2 U2,必须要单位化 U 2 U_2 U2,这样 U = [ U 1 : U 2 ] U=[U_1:U_2] U=[U1:U2]

    7. A = U m × m [ Σ 0 0 0 ] m × n V n × n H A=U_{m\times m}\begin{bmatrix}\Sigma & 0\\ 0 & 0 \end{bmatrix}_{m\times n}V_{n\times n}^H A=Um×m[Σ000]m×nVn×nH

  • Python求解奇异值分解

    import numpy as np
    from sympy import Matrix
    import pprint
    
    A = np.array([[1,0],[0,1],[1,1]])
    # 求A的奇异值分解
    U, sigma, VT = np.linalg.svd(A)
    print ("U:", U)
    print ("sigma:", sigma)
    print ("VT:", VT)
    

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

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

相关文章

【数电笔记】07-基本和复合逻辑运算

目录 说明&#xff1a; 基本逻辑运算 1. 与运算 &#xff08;and gate&#xff09; 2. 或运算 &#xff08;or gate&#xff09; 3. 非运算 &#xff08;not gate &#xff09; 复合逻辑运算 1. 与非运算&#xff08;nand&#xff09; 2. 或非运算&#xff08;nor&…

【python】保存excel

正确安装了pandas和openpyxl库。 可以通过在命令行中输入以下命令来检查&#xff1a; pip show pandas pip show openpyxl 可以使用pip安装 pip install pandas pip install openpyxl#更新 pip install --upgrade pandas pip install --upgrade openpyxl 保存excel …

抖店怎么对接达人带货?达人渠道整理,实操详解!

我是电商珠珠 很多人在抖店开通后&#xff0c;按照流程去正常的跑自然流量&#xff0c;再去找达人带货让自己店铺的流量增多&#xff0c;得到相应的曝光。 但是一些新手小白并不知道从哪去找达人&#xff0c;或者说不知道怎么去筛选达人。 一开始所有人都想着去找头部主播&a…

Deep Learning(wu--84)调参、正则化、优化--改进深度神经网络

文章目录 2偏差和方差正则化梯度消失\爆炸权重初始化导数计算梯度检验OptimizationMini-Batch 梯度下降法指数加权平均偏差修正RMSpropAdam学习率衰减局部最优问题 调参BNsoftmax framework 2 偏差和方差 唔&#xff0c;这部分在机器学习里讲的更好点 训练集误差大&#xff…

matplotlib 默认属性和绘图风格

matplotlib 默认属性 一、绘图风格1. 绘制叠加折线图2. Solarize_Light23. _classic_test_patch4. _mpl-gallery5. _mpl-gallery-nogrid6. bmh7. classic8. fivethirtyeight9. ggplot10. grayscale11. seaborn12. seaborn-bright13. seaborn-colorblind14. seaborn-dark15. sea…

kyuubi整合flink yarn session mode

目录 概述配置flink 配置kyuubi 配置kyuubi-defaults.confkyuubi-env.shhive 验证启动kyuubibeeline 连接使用hive catlogsql测试 结束 概述 flink 版本 1.17.1、kyuubi 1.8.0、hive 3.1.3、paimon 0.5 整合过程中&#xff0c;需要注意对应的版本。 注意以上版本 配置 ky…

C# 通俗讲解Public、Private以及Protected、[HideInInspector]、[SerializeField]的区别

一、故事背景 1.我画了一幅画&#xff0c;把它放在室外&#xff0c;所有人都可以看见这个画&#xff0c;所有人都可以对这个画进行修改。 2.我非常非常努力&#xff0c;赚了一大笔钱&#xff0c;这笔钱&#xff0c;只能我和我的子孙后代用&#xff0c;但如果我的孩子需要传给他…

unity旋转选中效果

代码和预制体 函数PlayAnim&#xff08;&#xff09;中的角度要根据按钮数量手动填好 using System; using DG.Tweening; using DG.Tweening.Core; using DG.Tweening.Plugins.Options; using UnityEngine;// Token: 0x0200001B RID: 27 public class BtnParentScript : Base…

24、pytest通过xfail将测试函数标记为预期失败

官方实例 # content of test_xfail.py import pytest import syspytest.mark.xfail def test_function():print("test_function was invoked.")def valid_config():return Falsedef test_function_02():if not valid_config():pytest.xfail("failing configura…

JVM 虚拟机(一)导学与字节码文件组成

一、实战 JVM - 基础篇 初识 JVM 什么是 JVM&#xff1f; Java Virtual Machine&#xff08;JVM&#xff09;&#xff0c;中文翻译为 Java 虚拟机 JVM 的功能 解释和运行&#xff1a;对字节码文件中的指令进行实施的解释成机器码&#xff0c;让计算机执行。自动为对象和方法…

PyTorch机器学习与深度学习实践技术应用

近年来&#xff0c;随着AlphaGo、无人驾驶汽车、医学影像智慧辅助诊疗、ImageNet竞赛等热点事件的发生&#xff0c;人工智能迎来了新一轮的发展浪潮。尤其是深度学习技术&#xff0c;在许多行业都取得了颠覆性的成果。另外&#xff0c;近年来&#xff0c;Pytorch深度学习框架受…

不会代码(零基础)学语音开发(语音播报板载双按键状态)

这个例程实现语音播报VDB-150S语音开发板板载的按键开关SW1、SW2的按下情况。 语音开发板将板载的按键开关SW1、SW2的一端都接到了GND端&#xff0c;另一端分别连接到语音模块的GPIO_B0、GPIO_B1引脚&#xff0c;当按下SW1时GPIO_B0引脚会输入低电平&#xff0c;当按下SW2时GP…

Hadoop学习笔记(HDP)-Part.19 安装Kafka

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

pyqt5+QWebEngineView+pdfjs+win32print实现pdf文件的预览、打印

一、pdf显示逻辑 import sys from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgetsPDFJS = file:///pdfjs-1.9.426-dist/web/viewer.html # PDFJS = file:///usr/share/pdf.js/web/viewer.html PDF = file:///D:/Code/report.pdfclass Window(QtWebEngineWidgets.QWebEng…

使用 MITRE ATTCK® 框架缓解网络安全威胁

什么是MITRE ATT&CK框架 MITRE Adversarial Tactics&#xff0c; Techniques&#xff0c; and Common Knowledge&#xff08;ATT&CK&#xff09;是一个威胁建模框架&#xff0c;用于对攻击者用来入侵企业、云和工业控制系统&#xff08;ICS&#xff09;并发起网络攻击…

在交易中价差遇上对冲,fpmarkets操作得当,盈利必不可少

想不到吧&#xff01;fpmarkets发现在交易中价差遇上对冲&#xff0c;只要操作得当&#xff0c;盈利必不可少。 下面我们就通过实践证明这个认知&#xff0c;我们大家都知道&#xff0c;交易可以分为两种方式:激进的和保守的。从定义中可以清楚地看出&#xff0c;一种方式风险较…

机器学习实验一:线性回归

系列文章目录 机器学习实验一&#xff1a;线性回归机器学习实验二&#xff1a;决策树模型机器学习实验三&#xff1a;支持向量机模型机器学习实验四&#xff1a;贝叶斯分类器机器学习实验五&#xff1a;集成学习机器学习实验六&#xff1a;聚类 文章目录 系列文章目录一、实验…

【python】使用pipenv创建虚拟环境进行打包

文章目录 一、pipenv 介绍二、快速上手使用pipenv2.1 安装pipenv2.2 创建虚拟环境2.3 激活环境2.4 虚拟环境中安装项目依赖包2.5 检查项目在虚拟环境中是否能正常运行2.6 打包项目2.7 删除虚拟环境 起因: 本地安装的模块太多,使用pyinstaller打包,会把许多无关模块打包进去&…

“站立的山川——周扬波 中国山水画创作新表达系列画展”将亮相深圳东方美术馆

展览信息 站立的山川——周扬波 中国山水画创作新表达系列画展 中国文学艺术界联合会青年文艺创作扶持计划项目 学术主持 陈明 学术顾问 何加林 主办单位 中国文化艺术发展促进会水墨画专业委员会 承办单位 深圳东方美术馆 协办单位 李可染画院 深圳东方银座酒店 …

微信小程序pc端宽高:默认宽高为1024*812,全屏宽高为1920*1032

最近开发调试pc端小程序&#xff0c;想知道默认打开和全屏这两种情况下的小程序宽高&#xff0c;发现了一种方法&#xff1a; 真机运行pc端小程序&#xff0c;点击devTools 在控制台直接打印window对象&#xff0c;可以获取到pc端默认屏幕宽高为1024*812&#xff0c;全屏pc端小…