算法设计与智能计算 || 专题九: 基于拉普拉斯算子的谱聚类算法

news2024/10/7 14:21:48

谱聚类

文章目录

1. 信息增益的度量

由于数据集 X = [ x 1 , x 2 , ⋯   , x n ] X=[\boldsymbol{x}_1, \boldsymbol{x}_2, \cdots, \boldsymbol{x}_n] X=[x1,x2,,xn] 的图结构不像图像的像素有像素值, 数据样本没有规整的结构, 也没有特定的函数 f f f, 因此, 我们需要为每个样本赋予一个函数值 { f i } i = 1 n \{f_i\}_{i=1}^n {fi}i=1n, 或表示成函数向量 f \boldsymbol{f} f. 为获得整个数据集的凸凹性(或差异性)

在这里插入图片描述

这种差异性可以通过拉普拉斯变换表示为
h = L f = ( D − W ) f = D f − W f \boldsymbol{h} = L\boldsymbol{f}=(D-W)\boldsymbol{f}=D\boldsymbol{f}-W\boldsymbol{f} h=Lf=(DW)f=DfWf
h \boldsymbol{h} h 的第 i i i 个 分量 h i h_i hi 可表示为
h i = d i f i − w i , : f = ∑ j ∈ N i w i j f i − ∑ j ∈ N i w i j f j = ∑ j ∈ N i w i j ( f i − f j ) h_i = d_if_i-w_{i,:}\boldsymbol{f}=\sum_{j\in N_i}w_{ij}f_i-\sum_{j\in N_i}w_{ij}f_j=\sum_{j\in N_i}w_{ij}(f_i-f_j) hi=difiwi,:f=jNiwijfijNiwijfj=jNiwij(fifj)
即, h i h_i hi 是第 i i i 个顶点 v i v_i vi 与其近邻点的差的和. 若构造一个量来表示所有顶点与其近邻点的差异的总和, 则可以由以下几种方式:

  • 第一种(计算困难): ∑ i = 1 n h i 2 = ∑ i = 1 n ( ∑ j ∈ N i w i j ( f i − f j ) ) 2 \sum_{i=1}^n h_i^2 =\sum_{i=1}^n\Big(\sum_{j\in N_i}w_{ij}(f_i-f_j)\Big)^2 i=1nhi2=i=1n(jNiwij(fifj))2
  • 第二种(正负值会抵消): ∑ i = 1 n h i = ∑ i = 1 n ∑ j ∈ N i w i j ( f i − f j ) \sum_{i=1}^n h_i =\sum_{i=1}^n\sum_{j\in N_i}w_{ij}(f_i-f_j) i=1nhi=i=1njNiwij(fifj)
  • 第三种(非负求和): ∑ i = 1 n f i ⋅ h i = ∑ i = 1 n f i ∑ j ∈ N i w i j ( f i − f j ) \sum_{i=1}^n f_i\cdot h_i =\sum_{i=1}^nf_i\sum_{j\in N_i}w_{ij}(f_i-f_j) i=1nfihi=i=1nfijNiwij(fifj)

综合上述三种情况, 第三种度量总的差异是最适合的.

∑ i = 1 n f i ⋅ h i = ∑ i = 1 n f i ∑ j ∈ N i w i j ( f i − f j )    = ∑ i = 1 n ∑ j ∈ N i w i j f i ( f i − f j )    = 1 2 ∑ i = 1 n ∑ j ∈ N i w i j ( 2 f i f i − 2 f i f j )    = 1 2 ∑ i = 1 n ∑ j ∈ N i w i j ( f i f i − 2 f i f j + f j f j )    = 1 2 ∑ i = 1 n ∑ j ∈ N i w i j ( f i − f j ) 2 \begin{array}{ll} \sum_{i=1}^n f_i\cdot h_i &=\sum_{i=1}^nf_i\sum_{j\in N_i}w_{ij}(f_i-f_j)\\\;\\ &=\sum_{i=1}^n\sum_{j\in N_i}w_{ij}f_i(f_i-f_j)\\\;\\ &=\frac{1}{2}\sum_{i=1}^n\sum_{j\in N_i}w_{ij}(2f_if_i-2f_if_j)\\\;\\ &=\frac{1}{2}\sum_{i=1}^n\sum_{j\in N_i}w_{ij}(f_if_i-2f_if_j+f_jf_j)\\\;\\ &=\frac{1}{2}\sum_{i=1}^n\sum_{j\in N_i}w_{ij}(f_i-f_j)^2 \end{array} i=1nfihi=i=1nfijNiwij(fifj)=i=1njNiwijfi(fifj)=21i=1njNiwij(2fifi2fifj)=21i=1njNiwij(fifi2fifj+fjfj)=21i=1njNiwij(fifj)2

因此, 数据集信息的总增益的度量可表示为

∑ i = 1 n f i ⋅ h i = 1 2 Σ i = 1 n Σ j ∈ N i w i j ( f i − f j ) 2    = 1 2 Σ i = 1 n Σ j ∈ N i w i j ( f i 2 + f j 2 − 2 f i f j )    = Σ i = 1 n Σ j ∈ N i w i j f i 2 − Σ i = 1 n Σ j ∈ N i w i j f i f j    = Σ i = 1 n ( w i 1 f 1 2 + w i 2 f 2 2 + ⋯ + w i n f n 2 ) − f ⊤ W f    = ( f 1 , f 2 , ⋯   , f n ) ( d 1 d 2 ⋱ d n ) ( f 1 f 2 ⋮ f n ) − ( f 1 , f 2 , ⋯   , f n ) ( w 11 w 12 ⋯ w 1 n w 21 w 22 ⋯ w 2 n ⋯ ⋯ ⋯ ⋯ w n 1 w n 2 ⋯ w n n ) ( f 1 f 2 ⋮ f n )    = f ⊤ D f − f ⊤ W f    = f ⊤ ( D − W ) f    = f ⊤ L f \begin{array}{l} \sum_{i=1}^n f_i\cdot h_i=\frac{1}{2}\Sigma_{i=1}^n\Sigma_{j\in N_i}w_{ij}(f_i-f_j)^2\\\;\\ =\frac{1}{2}\Sigma_{i=1}^n\Sigma_{j\in N_i}w_{ij}(f_i^2+f_j^2-2f_if_j)\\\;\\ =\Sigma_{i=1}^n\Sigma_{j\in N_i}w_{ij}f_i^2-\Sigma_{i=1}^n\Sigma_{j\in N_i}w_{ij}f_if_j\\\;\\ =\Sigma_{i=1}^n(w_{i1}f_1^2+w_{i2}f_2^2+\cdots+w_{in}f_n^2)-\boldsymbol f^{\top}W\boldsymbol f\\\;\\ =(f_1,f_2,\cdots,f_n)\begin{pmatrix} d_1 & & & \\ & d_2 & & \\ & & \ddots & \\ & & &d_n \end{pmatrix}\begin{pmatrix} f_1\\ f_2\\ \vdots \\ f_n \end{pmatrix}- (f_1,f_2,\cdots,f_n)\begin{pmatrix} w_{11} & w_{12} & \cdots & w_{1n} \\ w_{21} & w_{22}& \cdots & w_{2n}\\ \cdots &\cdots & \cdots & \cdots \\ w_{n1} & w_{n2} & \cdots &w_{nn} \end{pmatrix}\begin{pmatrix} f_1\\ f_2\\ \vdots \\ f_n \end{pmatrix}\\\;\\ =\boldsymbol{f}^{\top}D\boldsymbol{f}-\boldsymbol{f}^{\top}W\boldsymbol{f}\\\;\\ =\boldsymbol{f}^{\top}(D-W)\boldsymbol{f}\\\;\\ =\boldsymbol{f}^{\top}L\boldsymbol{f} \end{array} i=1nfihi=21Σi=1nΣjNiwij(fifj)2=21Σi=1nΣjNiwij(fi2+fj22fifj)=Σi=1nΣjNiwijfi2Σi=1nΣjNiwijfifj=Σi=1n(wi1f12+wi2f22++winfn2)fWf=(f1,f2,,fn) d1d2dn f1f2fn (f1,f2,,fn) w11w21wn1w12w22wn2w1nw2nwnn f1f2fn =fDffWf=f(DW)f=fLf

综上可知, 对于离散样本点的函数 f = ( f 1 , f 2 , ⋯   , f n ) ⊤ \boldsymbol{f}=(f_1,f_2,\cdots,f_n)^\top f=(f1,f2,,fn), w i j w_{ij} wij 为两个样本点之间的权重, 则数据集上的信息总增益为

f ⊤ L f = 1 2 Σ i = 1 n Σ j ∈ N i w i j ( f i − f j ) 2 \boldsymbol{f}^{\top}L\boldsymbol{f}=\frac{1}{2}\Sigma_{i=1}^n\Sigma_{j\in N_i}w_{ij}(f_i-f_j)^2 fLf=21Σi=1nΣjNiwij(fifj)2

2. 谱聚类: 寻找最优的函数向量 f \boldsymbol{f} f

2.1 : 寻找一个最优的函数向量 f \boldsymbol{f} f

为数据集的每个样本点寻找一个合适的函数 f i f_i fi, 完成函数的求值 { f i ( x i ) } i = 1 n \Big\{f_i(\boldsymbol{x}_i)\Big\}_{i=1}^n {fi(xi)}i=1n. 为使得样本点之间可以在同一尺度下进行大小的比较, 我们将函数值限定在0,1之间, 则可转化为约束 优化问题
min ⁡ f f ⊤ L f s . t f ⊤ f = 1 \min_{\boldsymbol{f}}\boldsymbol{f}^{\top}L\boldsymbol{f}\\ s.t \quad \boldsymbol{f}^{\top}\boldsymbol{f}=1 fminfLfs.tff=1

利用拉格朗日乘子法将等式约束优化问题转化成无约束优化问题
min ⁡ f Q ( f ) = f ⊤ L f − λ f ⊤ f \min_{\boldsymbol{f}}Q(\boldsymbol{f})=\boldsymbol{f}^{\top}L\boldsymbol{f}-\lambda\boldsymbol{f}^{\top}\boldsymbol{f} fminQ(f)=fLfλff
求极值
∂ Q ( f ) ∂ f = 2 L f − 2 λ f = 2 ( L f − λ f ) = 0 \frac{\partial Q(\boldsymbol{f})}{\partial \boldsymbol{f}} =2L\boldsymbol{f}-2\lambda\boldsymbol{f}=2(L\boldsymbol{f}-\lambda\boldsymbol{f})=0 fQ(f)=2Lf2λf=2(Lfλf)=0


L f = λ f ( 转化为求拉普拉斯特征向量问题 ) L\boldsymbol{f}=\lambda\boldsymbol{f}(转化为求拉普拉斯特征向量问题) Lf=λf(转化为求拉普拉斯特征向量问题)

这是拉普拉斯矩阵 L L L 的特征方程. 由于拉普拉斯矩阵的行和为 0 0 0, 上式有一个平凡解 λ = 0 \lambda=0 λ=0, 其对应的特征向量为 1 \boldsymbol{1} 1. 此解显然与数据集无关, 不是优化问题的最优解. 又因为拉普拉斯矩阵是半正定矩阵, 特征值非负, 因此, f \boldsymbol{f} f 是拉普拉斯矩阵第二小的特征值对应的特征向量.

将上式两边左乘 f ⊤ \boldsymbol{f}^{\top} f
m i n f ⊤ L f ⇔ m i n λ f ⊤ f = m i n λ = λ m i n min\boldsymbol{f}^{\top}L\boldsymbol{f}\Leftrightarrow min\lambda\boldsymbol{f}^{\top}\boldsymbol{f}=min\lambda=\lambda_{min} minfLfminλff=minλ=λmin

min ⁡ f f ⊤ L f f ⊤ f = λ m i n \min_{\boldsymbol{f}}\frac{\boldsymbol{f}^{\top}L\boldsymbol{f}}{\boldsymbol{f}^{\top}\boldsymbol{f}}=\lambda_{min} fminfffLf=λmin
称为瑞利熵

2.2 寻找鲁棒性更强的多个函数向量

为获得更加鲁棒的结果, 可以寻找多个向量函数, 然后进行信息的融合. 则数据集上的信息总增益表示为

min ⁡ f 1 , ⋯   , f k Σ i = 1 k f i ⊤ L f i \min_{\boldsymbol{f_1,\cdots,f_k}}\Sigma_{i=1}^k\boldsymbol{f_i}^{\top}L\boldsymbol{f_i} f1,,fkminΣi=1kfiLfi

Σ i = 1 k f i ⊤ L f i = min ⁡ f 1 , ⋯   , f k ( f 1 ⊤ ⋮ f k ⊤ ) ( L 11 L 12 ⋯ L 1 n L 21 L 22 ⋯ L 2 n ⋯ ⋯ ⋯ ⋯ L n 1 L n 2 ⋯ L n n ) ( f 1 ⋮ f k ) = min ⁡ F t r ( F ⊤ L F ) \Sigma_{i=1}^k\boldsymbol{f_i}^{\top}L\boldsymbol{f_i}=\min_{\boldsymbol{f_1,\cdots,f_k}} \begin{pmatrix} \boldsymbol{f}_1^{\top}\\ \vdots \\ \boldsymbol{f}_k^{\top} \end{pmatrix} \begin{pmatrix} L_{11} & L_{12} & \cdots & L_{1n} \\ L_{21} & L_{22}& \cdots & L_{2n}\\ \cdots &\cdots & \cdots & \cdots \\ L_{n1} & L_{n2} & \cdots &L_{nn} \end{pmatrix} \begin{pmatrix} \boldsymbol{f}_1\\ \vdots \\ \boldsymbol{f}_k \end{pmatrix}\\ =\min_{\boldsymbol{F}}tr(\boldsymbol{F}^{\top}L\boldsymbol{F}) Σi=1kfiLfi=f1,,fkmin f1fk L11L21Ln1L12L22Ln2L1nL2nLnn f1fk =Fmintr(FLF)

结论:此问题等价于求多个较小的特征向量。

2.3 谱聚类(spectral clustering)算法

通过构造连接矩阵的方式获取拉普拉斯矩阵, 然后进行最优化求解

  • 图拉普拉斯版本, 此版本效率有点儿低
class spectralClust_graph:
    
    def __init__(self, nClust=2, gamma=13.5, tau=0.1):
        
        self.nClust = nClust # 初始化类数
        self.gamma = gamma # 径向基核函数参数
        self.tau = tau # 近邻半径参数
    
    # 计算距离矩阵    
    def pairwise_distances(self, X):
        n = X.shape[1]
        G = X.T@X
        H = np.diag(G).reshape(-1,1)@np.ones((1,n))
        dist = H+H.T-2*G
        Dist = np.sqrt(dist)
        print(Dist.shape)
        return Dist
        return Dist
    
    # 计算权重矩阵
    def create_graph_weights(self, X, gamma, tau):
        
        # YOUR CODE HERE
        distance_matrix = self.pairwise_distances(X.T)
        n = distance_matrix.shape[0]
        graph_weights = []
        weights = np.exp(-gamma*distance_matrix)
        weights = weights*(weights>=tau)
        for i in range(n):
            for j in range(n):
                if i != j:
                    graph_weights.append(weights[i,j])
        graph_weights = np.array(graph_weights)
        return graph_weights
    
    # 计算连接矩阵
    def construct_incidence_matrix(self, X):
        
        weights = self.create_graph_weights(X, self.gamma, self.tau)
        
        no_of_samples = X.shape[0]
        # 为数据集连接边分配索引
        edges = []
        for i in range(no_of_samples):
            for j in range(no_of_samples):
                if i == j:
                    continue
                else:
                    edges.append([i,j])
        
        no_of_edges = len(edges)
        incidence_matrix = np.zeros(shape=(no_of_edges,no_of_samples))
        for index in range(no_of_edges):
            indices = edges[index]
            incidence_matrix[index, indices[0]] = -np.sqrt(weights[index])
            incidence_matrix[index, indices[1]] = np.sqrt(weights[index])
        id0 = (incidence_matrix==0).all(1)
        incidence_matrix = np.delete(incidence_matrix,id0,axis=0)
        return incidence_matrix
        
    
    def fit(self, X):
        incidence_matrix = self.construct_incidence_matrix(X)
        graph_laplacian = incidence_matrix.T@incidence_matrix
        eigenvalues, eigenvectors = linalg.eigs(graph_laplacian,k=self.nClust,which='SM')
        Labels = k_means(eigenvectors.real,self.nClust)
        
        return Labels[1]

import numpy as np
from scipy.sparse import linalg
from matplotlib.colors import ListedColormap
from sklearn.datasets import make_moons
from sklearn.cluster import k_means
import matplotlib.pyplot as plt

if __name__ == "__main__":
    # 构造数据集
    seed = 13
    np.random.seed(seed)
    no_of_samples = 1000
    X, y = make_moons(n_samples=no_of_samples, noise=0.1, random_state=seed)
    
    scg = spectralClust_graph()
    unsupervised_labels = scg.fit(X)
    
    # 画图
    colormap_bright = ListedColormap(['#FF0000', '#0000FF']) # 设置颜色
    plt.figure(figsize=(12,6))
    plt.subplot(121)
    plt.scatter(X[:, 0], X[:, 1])
    plt.xticks(fontsize=16)
    plt.yticks(fontsize=16)
    
    plt.subplot(122)
    plt.scatter(X[:, 0], X[:, 1], c=unsupervised_labels, cmap=colormap_bright, edgecolors='k')
    plt.xticks(fontsize=16)
    plt.yticks(fontsize=16)
    
    plt.show()    

在这里插入图片描述

  • 通用的普聚类版本
    也可以通过度矩阵构造拉普拉斯矩阵 L = D − W L=D-W L=DW, 然后进行优化.
class spectralCLUST:
    
    def __init__(self, nClust=2, gamma=13.5, tau=0.1, affinity=None):
        
        self.nClust = nClust # 初始化类数
        self.gamma = gamma # 径向基核函数参数
        self.tau = tau # 近邻半径参数
        self.affinity = affinity
    
    # 计算距离矩阵, 矩阵的每一列为一个样本点    
    def pairwise_distances(self, X):
        n = X.shape[1]
        G = X.T@X
        H = np.diag(G).reshape(-1,1)@np.ones((1,n))
        dist = H+H.T-2*G
        Dist = np.sqrt(dist)
        print(Dist.shape)
        return Dist
    
    # 计算拉普拉斯矩阵,矩阵的每一列为一个样本点 
    def create_Weights(self, X, gamma, tau):
        
        #
        distance_matrix = self.pairwise_distances(X)
        n = distance_matrix.shape[0]
        weights = np.exp(-gamma*distance_matrix)
        Weights = weights*(weights>=tau)
        return Weights
    
    def clustering(self,CKSym):
        N = CKSym.shape[1]
        n = self.nClust
        DN = np.diag(np.divide(1, np.sqrt(np.sum(CKSym, axis=0) + np.finfo(float).eps)))
        LapN = identity(N).toarray().astype(float) - np.matmul(np.matmul(DN, CKSym), DN)
        _, _, vN = np.linalg.svd(LapN)
        vN = vN.T
        kerN = vN[:, N - n:N]
        normN = np.sqrt(np.sum(np.square(kerN), axis=1))
        kerNS = np.divide(kerN, normN.reshape(len(normN), 1) + np.finfo(float).eps)
        km = KMeans(n_clusters=n).fit(kerNS)
        return km.labels_
        
    # 拟合函数,矩阵 X 的每一列为数据点
    def fit(self, X): 
        if self.affinity == None:
            gamma = self.gamma
            tau = self.tau
            W = self.create_Weights(X, gamma, tau)
            Labels = self.clustering(W)
        if self.affinity == 'precomputed':
            Labels = self.clustering(X)
        
        return Labels

import numpy as np
from scipy.sparse import linalg
from matplotlib.colors import ListedColormap
from sklearn.datasets import make_moons
from sklearn.cluster import KMeans
from scipy.sparse import identity
import matplotlib.pyplot as plt
    
if __name__ == "__main__":
    # 构造数据集
    seed = 13
    np.random.seed(seed)
    no_of_samples = 1000
    X, y = make_moons(n_samples=no_of_samples, noise=0.1, random_state=seed)
    
    clt = spectralCLUST()
    unsupervised_labels = clt.fit(X.T)    
    # 画图
    colormap_bright = ListedColormap(['#FF0000', '#0000FF']) # 设置颜色
    plt.figure(figsize=(12,6))
    plt.subplot(121)
    plt.scatter(X[:, 0], X[:, 1])
    plt.xticks(fontsize=16)
    plt.yticks(fontsize=16)
    
    plt.subplot(122)
    plt.scatter(X[:, 0], X[:, 1], c=unsupervised_labels, cmap=colormap_bright, edgecolors='k')
    plt.xticks(fontsize=16)
    plt.yticks(fontsize=16)
    
    plt.show()

在这里插入图片描述

小结

第二种编程的方法可以实现通用的功能, 既可以处理样本数据集, 同时也可以处理权重矩阵, 以备后续章节使用

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

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

相关文章

自动化仓储管理系统(WMS)

仓储是现代物流的一个重要组成部分,在物流系统中起着至关重要的作用,是厂商研究和规划的重点。高效合理的仓储可以帮助厂商加快物资流动的速度,降低成本,保障生产的顺利进行,并可以实现对资源有效控制和管理。 随着我…

CVE-2023-27363 FOXIT PDF READER与EDITOR任意代码执行漏洞复现

目录 0x01 声明: 0x02 简介: 0x03 漏洞概述: 0x04 影响版本: 0x05 环境搭建: 文件下载: 0x06 漏洞复现: POC下载: 利用POC: RCE: 0x07 修复建议&a…

2023.5.21 第五十四次周报

目录 前言 文献阅读:跨多个时空尺度进行预测的时空 LSTM 模型 背景 本文思路 本文解决的问题 方法论 SPATIAL 自动机器学习模型 数据处理 模型性能 代码 用Python编写的LSTM多变量预测模型 总结 前言 This week, I studied an article that uses LSTM to solve p…

Kuberadm安装部署

目录 1、所需配置 2、准备环境 3、安装Docker 4、安装Kubeadm、Kubelet和Kuberctl 5、部署K8s集群 6、初始化kubeadm 7、设置kubecrl 8、部署网络插件flannel 测试 9、部署Dashboard 10、安装Harbor私有仓库 11、内核参数优化方案 1、所需配置 主机名系统要求IP地…

一款C#开发的窗口文本提取开源软件

窗体上的文字,我们是无法直接复制的,如果要获取,大家第一反应肯定是利用OCR,但是今天给大家推荐一个通过Hook原理来抓取文本的开源项目。 项目简介 这是一个基于.Net Framework开发的,功能强大的文本提取工具&#x…

【消息中间件】为什么要用消息中间件?解决了什么问题?

文章目录 前言一、什么是消息中间件?二、为什么使用?二、使用消息中间件前后对比三、当前几种中间件:四、使用消息中间件场景: 前言 一般认为,采用消息传送机制/消息队列 的中间件技术,进行数据交流&#…

[CISCN 2019华东南]Web4 day5

考察:任意文件读取 获取网卡地址 伪随机 打开界面,点击read somethings直接进行了跳转 直接修改url,发现没显示,但是访问错误的路由就会有no response 读取flag也无果,那就读一下/app/app.py,为什么读这个&…

postgresql|数据库|插件学习(二)---postgresql-12的外置插件pg_profile的启用和使用

前言: postgresql数据库有非常多的插件,那么,pg_profile算是监控类的插件,该插件会通过内置的pg_stat_statements插件和dblink插件这两个插件监控查询postgresql的状态,并可以通过打快照的方式得到awr报告。 ###注&a…

攻防世界 wife_wife

查看提示:不需要爆破 进入到靶场中,发现需要注册用户 到达注册页面,is admin需要打勾,并输入同样 burpsuite抓包 原来payload:{"username":"1","password":"1","isAdmin…

MySQL数据库---笔记2

MySQL数据库---笔记2 一、函数1.1、字符串函数1.2、数值函数1.3、日期函数1.4、流程函数 二、约束2.1、概述2.2、演示2.3、外键约束 一、函数 函数 是指一段可以直接被另一段程序调用的程序或代码。 1.1、字符串函数 函数功能CONCAT(S1,S2,…Sn)字符串拼接,将S1&…

分布式医疗云平台【基础功能搭建、数据表定义、ERP业务表、系统表、其它配置表 】(三)-全面详解(学习总结---从入门到深化)

基础功能搭建 创建数据库 数据表定义 ERP业务表 系统表 其它配置表 基础功能搭建 创建数据库 执行脚本,创建基础数据 数据表定义 业务表 his_care_order: 药用处方表,涉及的业务模块:处方收费、处方发药、新开检查 his_care_history…

jetson填坑-单独安装cuda,cudnn,tensorrt任意适用版本

前言 jetson无法单独安装cuda,cudnn,tensorrt的解决方法,比下载SDK manager刷机安装简单好多倍 这个方法是直接下载deb包安装,deb包安装网站 https://repo.download.nvidia.com/jetson/ 单独安装cuda 1 sudo apt-get install …

ArcMap:第一届全国大学生GIS应用技能大赛(滁州学院)详解

目录 01 上午题 1.1 题目 1.2 数据 1.2.1 如何添加比赛数据? 1.2.2 比赛数据展示 1.3 思路 1.3.1 坐标系问题 1.4 实操 1.4.1 建立空间数据库和比赛数据导入 1.4.2 坐标系问题解决 1.4.3 要素的订正 1.4.4 数据入库和符号化管理; 1.4.5 其…

C++ thread编程(Linux系统为例)—thread成员函数

c 11 之后有了标准的线程库&#xff1a;std::thread。 参考thread库的使用 构造函数 thread的构造函数有下面四个重载 默认构造函数 thread() noexcept初始化构造函数 template <class Fn, class... Args> explicit thread (Fn&& fn, Args&&... arg…

HP-800G4-DM 电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件型号驱动情况 主板HP 800G4 DM 35W 处理器intel i5-9600T已驱动 内存Samsung DDR4 2666 32G*2已驱动 硬盘WD SN750 500G已驱动 显卡intel UHD 630已驱动 声卡瑞昱…

SpringBoot项目中Controller层、Service层、Dao层、entity层、Configuration层、Utils层作用

SpringBoot项目中各层的作用 1、Controller层2、Service层3、Dao层&#xff08;Mapper层&#xff09;4、entity层&#xff08;model层&#xff09;5、Configuration层6、Utils层各层作用架构图 1、Controller层 Controller层为控制层&#xff0c;一般使用 RestController 或 C…

【Linux入门】Linux指令(2)

【Linux入门】Linux指令(2) 目录 【Linux入门】Linux指令(2)时间相关的指令cal指令find指令&#xff08;重要&#xff0c;选项很多&#xff09;-namegrep指令zip/unzip指令tar指令&#xff08;重要&#xff09;bc指令uname -r指令重要的几个热键[Tab],[ctrl]-c, [ctrl]-d关机&a…

车载软件架构——闲聊几句AUTOSAR OS(一)

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 人们会在生活中不断攻击你。他们的主要武器是向你灌输对自己的怀疑:你的价值、你的能力、你的潜力。他们往往会将此伪装成客观意见,但无一例外的是,他们想…

transformers两个入门示例

根据《attention is all you need》论文而形成的transformers框架在chat-gpt应用中大放异彩&#xff0c;目前transformers框架已经成了炙手可热的框架。它不仅在nlp方面很作用很大&#xff0c;根据官网的介绍&#xff0c;它还可以做很多事情&#xff0c;比如图片分类&#xff0…

【SpringCloud】二、服务注册与发现 Eureka与Nacos

文章目录 一、Eureka1、服务提供者与消费者2、Eureka原理分析3、搭建Eureka4、服务注册5、模拟多服务实例启动6、服务的发现 二、Ribbon1、负载均衡的原理2、源码分析3、负载均衡策略 三、Nacos三、网关gateway1、网关的作用2、搭建网关服务 一、Eureka 1、服务提供者与消费者…