首页 > 编程语言 >《Python 图神经网络编程全指南》

《Python 图神经网络编程全指南》

时间:2024-12-08 14:27:41浏览次数:5  
标签:torch Python self 编程 edge 神经网络 num 节点

《Python 图神经网络编程全指南》

一、引言

Python 中的图神经网络编程正逐渐成为数据科学和机器学习领域的热门话题。随着数据的日益复杂和多样化,传统的数据分析方法往往难以有效地处理具有复杂关系结构的数据。而图神经网络作为一种新兴的技术,能够很好地捕捉图结构数据中的节点关系和全局结构信息,为解决各种实际问题提供了强大的工具。
本文将深入探讨图神经网络的基本概念,并通过多个编程例子展示如何使用 Python 实现图神经网络。从简单的图结构绘制到复杂的图神经网络模型构建,我们将逐步介绍图神经网络在 Python 中的应用。无论是对于数据科学爱好者还是专业的机器学习从业者,本文都将提供有价值的参考和实践指导。
在接下来的内容中,我们将首先介绍图的基本概念和术语,包括节点、边、邻接矩阵等。然后,我们将回顾传统的图分析方法,如最短路径算法和 PageRank 算法。接着,我们将深入探讨图神经网络的基本原理,包括消息传递、信息聚合和状态更新等步骤。最后,我们将通过具体的编程例子展示如何使用 Python 实现不同类型的图神经网络模型,如图卷积网络、图注意力网络和图自编码器等。
让我们一起开启 Python 图神经网络编程的探索之旅吧!

二、图神经网络基础概念

1. 什么是图神经网络

(1). 定义和特点
图神经网络(Graph Neural Networks, GNNs)是一种专门设计用于处理图数据的机器学习模型。图是由节点(顶点)和边构成的复杂数据结构,例如社交网络、化学分子结构等。GNNs 通过聚合邻居节点的信息,并将这些信息传递给当前节点进行更新,实现了对图结构中局部依赖性的捕捉。
GNNs 的特点主要包括以下几点:
非顺序排序的特征学习:GNN 的输出不以节点的输入顺序为转移。
两个节点之间依赖关系的学习:传统的神经网络中,这种依赖关系只能通过节点的特征来体现。
推理能力:GNN 能够从非结构化数据(例如:场景图片、故事片段等)中生成推理图。
强大的语义可视化能力:这种优势被所有的 GNN 模型所共享,例如在异常交易账户识别的场景中,GNN 在将某个账户判断为异常账户之后,可以将该账户的局部子图可视化出来。
(2). 与传统神经网络的区别
神经网络通常用于处理结构化数据,如一维、二维或高维数组,比如图像、音频或文本。这些模型基于一系列节点(即神经元),节点之间通过连接权重相互作用。常见的神经网络架构包括前馈神经网络(FFNN)、卷积神经网络(CNN)和循环神经网络(RNN)。神经网络的核心思想是利用非线性变换对输入数据进行建模和预测。
而图神经网络则专门设计用于处理图数据。相比传统神经网络,GNN 在保留上下文关联性和处理动态图方面更具优势。简单来说,神经网络更通用,而图神经网络则是针对特定类型的数据 —— 网络结构数据的特化工具。如果需要处理的数据是独立个体之间的关系,那么图神经网络可能是更适合的选择。

2. 图的基本概念

(1). 节点和顶点
在图论中,节点也被称为顶点(Vertex),是图的基本单位,通常会存储一个对象或者实体,图中的节点通过边连接起来构成一张图。例如在社交网络中,每个用户可以看作一个节点,用户之间的关系可以看作边。
(2). 有向图和无向图
无向图:边没有方向。如果存在一条边连接两个顶点,那么这两个顶点是相邻的,可以从一个顶点到另一个顶点,也可以从另一个顶点到这个顶点。在无向图中,每个顶点有一个度数,等于与其相连的边的数量。无向图常用于表示双向关系,如社交网络中的友谊关系。
有向图:边有方向。如果存在一条边从一个顶点指向另一个顶点,那么可以从这个顶点到另一个顶点,但不一定能从另一个顶点到这个顶点。有向图中每个顶点有入度和出度两个度数,入度是指向该顶点的边的数量,出度是从该顶点出发的边的数量。有向图常用于表示单向关系,如网页之间的超链接关系。
有向图和无向图在表示方式上也有所不同:
无向图可以用邻接矩阵和邻接表表示。邻接矩阵是一个二维矩阵,其中矩阵中的元素表示顶点之间的边的关系,如果两个顶点之间存在边,则矩阵中对应的元素为 1;邻接表是一个数组,数组的每个元素对应一个顶点,元素中保存了与该顶点相连的其他顶点的信息。
有向图也可以用邻接矩阵和邻接表表示。邻接矩阵和无向图相同,用 1 或 0 表示是否存在边。邻接表中的每个元素仍然对应一个顶点,但每个元素还需要保存该顶点指向其他顶点的信息。

三、使用 Python 库进行图神经网络编程

1. NetworkX 库

(1). 创建空图
使用 NetworkX 库可以方便地创建和操作图。首先,我们需要安装 NetworkX 库,可以使用以下代码进行安装:pip install networkx。安装完成后,我们可以开始创建一个空图。首先,导入 networkx 库,并创建一个空图对象:import networkx as nx,G = nx.Graph()。在这个示例中,我们创建了一个名为 G 的图对象,它是一个空图。
(2). 添加节点和边
在无向图中,节点可以是任何类型的对象。我们可以使用 add_node() 方法来添加节点到图中。例如,G.add_node(1),这个示例中,我们添加了一个整数节点 1 到图 G 中。你可以根据需要添加更多的节点。在无向图中,边是连接两个节点的关系。我们可以使用 add_edge() 方法来添加边到图中。例如,G.add_edge(1,2),这个示例中,我们添加了一条边连接节点 1 和节点 2。你可以根据需要添加更多的边。
(3). 可视化图
NetworkX 可以与 Matplotlib 结合使用,方便地进行图的可视化。首先导入 Matplotlib 库,import matplotlib.pyplot as plt。然后绘制图,nx.draw(G, with_labels=True),最后使用 plt.show() 显示图形。

2. PyTorch Geometric 库

(1). 环境配置
打开 Anaconda Prompt,新建环境。使用命令 conda create -n torch python=3.8。安装 PyTorch GPU 版本,先激活环境 conda activate torch,然后配置通道 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/,接着安装 PyTorch conda install pytorch1.10.1 torchvision0.11.2 torchaudio==0.10.1 cudatoolkit=10.2。安装工具包,下载四个轮子文件,然后使用 pip install 安装,例如 pip install C:\…\torch_cluster-1.5.9-cp38-cp38-win_amd64.whl等。最后安装 PyTorch Geometric,pip install torch-geometric -i https://pypi.douban.com/simple。
(2). 数据准备
可以使用 PyTorch Geometric 自带的数据集或者创建个人数据集。如果使用自带数据集,如 Cora ML 引文数据集,可以通过 data = tg.datasets.CitationFull(root=“data”, name=“Cora_ML”)获取数据。如果创建个人数据集,可以使用 PyTorch Geometric 提供的三个抽象类 Data、InMemoryDataset 和 Dataset。例如,使用 InMemoryDataset 需要实现四个基本方法:raw_file_names()、processed_file_names()、download()和 process()。
(3). 数据预处理
对于链接预测任务,可以使用 torch_geometric.transforms.RandomLinkSplit进行链接拆分。例如,link_splitter = tg.transforms.RandomLinkSplit(num_val=0.2,num_test=0.1,add_negative_train_samples=False,disjoint_train_ratio=0.8),然后将数据进行拆分,train_g, val_g, test_g = link_splitter(data[0])。

4. 模型构建

可以构建一个基于图神经网络的模型,例如使用 SAGE 卷积构建一个 GNN 模型。以下是一个示例代码:

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch_geometric.nn as tgnn
import pytorch_lightning as pl

class GNN(nn.Module):
    def __init__(self,dim_in: int,conv_sizes: Tuple[int,...],act_f: nn.Module = torch.relu,dropout: float = 0.1,*args,**kwargs):
        super().__init__()
        self.dim_in = dim_in
        self.dim_out = conv_sizes[-1]
        self.dropout = dropout
        self.act_f = act_f
        last_in = dim_in
        layers = []
        for conv_sz in conv_sizes:
            conv = tgnn.SAGEConv(in_channels=last_in, out_channels=conv_sz, *args, **kwargs)
            last_in = conv_sz
            layers.append(conv)
        self.layers = nn.ModuleList(layers)

    def forward(self, x: torch.Tensor, edge_index: torch.Tensor) -> torch.Tensor:
        h = x
        for conv in self.layers:
            h = conv(h, edge_index)
            h = self.act_f(h)
            if self.dropout:
                h = nn.functional.dropout(h, p=self.dropout, training=self.training)
        return h

5. 模型训练和评估

可以使用 PyTorch Lightning 进行模型训练和评估。以下是一个示例代码:

class LinkPredModel(pl.LightningModule):
    def __init__(self,dim_in: int,conv_sizes: Tuple[int,...],act_f: nn.Module = torch.relu,*args,**kwargs):
        super().__init__()
        self.gnn = GNN(dim_in, conv_sizes, act_f, *args, **kwargs)
        self.linear = nn.Linear(conv_sizes[-1], 1)

    def forward(self, x: torch.Tensor, edge_index: torch.Tensor):
        h = self.gnn(x, edge_index)
        return self.linear(h)

    def training_step(self, batch, batch_idx):
        x, edge_index, y = batch.x, batch.edge_index, batch.edge_label.float()
        out = self(x, edge_index)
        loss = F.binary_cross_entropy_with_logits(out, y)
        return loss

    def validation_step(self, batch, batch_idx):
        x, edge_index, y = batch.x, batch.edge_index, batch.edge_label.float()
        out = self(x, edge_index)
        loss = F.binary_cross_entropy_with_logits(out, y)
        return {'val_loss': loss}

    def validation_epoch_end(self, outputs):
        avg_loss = torch.stack([x['val_loss'] for x in outputs]).mean()
        self.log('val_loss', avg_loss)

    def configure_optimizers(self):
        return torch.optim.Adam(self.parameters(), lr=0.01)

四、图神经网络编程例子

1. 绘制神经网络图

使用 networkx 和 matplotlib 绘制简单神经网络
使用networkx和matplotlib可以轻松绘制简单神经网络。首先需要安装这两个库,可以使用pip install networkx和pip install matplotlib进行安装。安装完成后,导入库并创建有向图对象,例如:

    import networkx as nx
    import matplotlib.pyplot as plt
    G = nx.DiGraph()

接着可以添加节点和边,例如添加两个节点和一条边:

    G.add_node(1)
    G.add_node(2)
    G.add_edge(1, 2)

为了让绘制的图像看起来像一个神经网络,需要为节点设置坐标。创建字典pos,字典的key是节点的名称,字典的value是节点所在位置。例如:

    pos = {1:(0,0.25), 2:(0,0.75)}

最后使用nx.draw函数进行绘制,设置节点和边的颜色、粗细以及节点的大小等参数:

    nx.draw(G, pos, with_labels=True, node_color='white', edgecolors='black', linewidths=3, width=2, node_size=1000)
    plt.show()

自定义函数绘制不同结构的神经网络
可以自定义函数,根据传入的输入层、隐含层、输出层的神经元数量,绘制对应的神经网络。以下是一个示例代码:

    import networkx as nx
    import matplotlib.pyplot as plt

    def draw_network_digraph(input_num, hidden_num, output_num):
        G = nx.DiGraph()
        # 连接输入层和隐含层之间的边
        for i in range(input_num):
            for j in range(hidden_num):
                G.add_edge(i, input_num + j)
        # 连接隐含层和输出层之间的边
        for i in range(hidden_num):
            for j in range(output_num):
                G.add_edge(input_num + i, input_num + hidden_num + j)
        pos = dict()
        # 计算每个节点的坐标
        for i in range(0, input_num):
            pos[i]=(0, i - input_num /2)
        for i in range(0, hidden_num):
            hidden = i + input_num
            pos[hidden]=(1, i - hidden_num /2)
        for i in range(0, output_num):
            output = i + input_num + hidden_num
            pos[output]=(2, i - output_num /2)
        # 调用 nx.draw 绘制神经网络
        nx.draw(G, pos, with_labels=False, node_color='white', edgecolors='black', linewidths=3, width=2, node_size=1000)

可以尝试多组参数,绘制不同结构的神经网络:

   if __name__ == '__main__':
       draw_network_digraph(3,5,2)
       plt.show()
       draw_network_digraph(5,2,6)
       plt.show()
       draw_network_digraph(1,10,1)
       plt.show()

2. 实现图卷积网络(GCN)

构建 GCN 模型
以下是一个简单的 GCN 模型的 Python 代码示例:

    import torch
    import torch.nn as nn

    class GCN(nn.Module):
        def __init__(self, input_dim, hidden_dim, output_dim):
            super(GCN, self).__init__()
            self.linear1 = nn.Linear(input_dim, hidden_dim)
            self.relu = nn.ReLU()
            self.linear2 = nn.Linear(hidden_dim, output_dim)

        def forward(self, x, adj_matrix):
            x = self.linear1(x)
            x = torch.matmul(adj_matrix, x)
            x = self.relu(x)
            x = self.linear2(x)
            return x

训练和评估 GCN 模型
可以使用类似于其他深度学习模型的训练和评估方法来训练和评估 GCN 模型。以下是一个示例代码框架:

    import torch.optim as optim

    # 假设已有数据 x 和邻接矩阵 adj_matrix,以及对应的标签 y
    model = GCN(input_dim, hidden_dim, output_dim)
    optimizer = optim.Adam(model.parameters(), lr=0.001)
    criterion = nn.CrossEntropyLoss()

    for epoch in range(num_epochs):
        optimizer.zero_grad()
        outputs = model(x, adj_matrix)
        loss = criterion(outputs, y)
        loss.backward()
        optimizer.step()

        # 评估模型,可以计算准确率等指标

3. 表示 “机构 - 作者 - 论文” 网络

通过继承 Data 类实现特定网络
通过继承Data类可以实现一个专门用于表示 “机构 - 作者 - 论文” 的网络。参考以下代码:

    import torch
    from torch_geometric.data import Data

    class InstitutionAuthorPaperData(Data):
        def __init__(self, x_author=None, x_institution=None, x_paper=None, edge_index_author_institution=None, edge_index_author_paper=None, y=None, **kwargs):
            self.x_author = x_author
            self.x_institution = x_institution
            self.x_paper = x_paper
            self.edge_index_author_institution = edge_index_author_institution
            self.edge_index_author_paper = edge_index_author_paper
            self.y = y
            for key, item in kwargs.items():
                if key == 'num_nodes':
                    self.__num_nodes__ = item
                else:
                    self[key] = item

存储不同节点和边的属性
在上述类中,可以用不同的属性存储不同节点的属性和不同的边(边没有属性)。例如,x_author存储作者节点的属性,x_institution存储机构节点的属性,x_paper存储论文节点的属性,edge_index_author_institution存储作者 - 机构边的索引,edge_index_author_paper存储作者 - 论文边的索引。
获取不同节点数量的方法
可以逐一实现获取不同节点数量的方法,例如:

   def get_num_authors(self):
       if self.x_author is not None:
           return self.x_author.shape[0]
       else:
           return 0

   def get_num_institutions(self):
       if self.x_institution is not None:
           return self.x_institution.shape[0]
       else:
           return 0

   def get_num_papers(self):
       if self.x_paper is not None:
           return self.x_paper.shape[0]
       else:
           return 0

4. 绘制神经网络结构图

使用 pygraphviz 和 networkx 绘制结构图
可以使用pygraphviz和networkx来绘制神经网络的结构图。首先安装pygraphviz库,可以使用pip install pygraphviz进行安装。以下是一个示例代码:

    import networkx as nx
    import pygraphviz as pgv

    # 创建一个有向图
    G = nx.DiGraph()
    # 添加节点
    G.add_node('输入层')
    G.add_node('隐藏层')
    G.add_node('输出层')
    # 添加边
    G.add_edge('输入层', '隐藏层')
    G.add_edge('隐藏层', '输出层')

    # 将 networkx 图转换为 pygraphviz 图
    A = nx.nx_agraph.to_agraph(G)
    # 绘制并保存为图片
    A.layout('dot')
    A.draw('neural_network_structure.png')

展示神经网络的结构、流程图和序列图
神经网络的结构可以通过上述绘制的结构图直观地展示。
流程图可以使用 Mermaid 语法绘制,例如:

 flowchart TD
 输入层 --\u003e 隐藏层
 隐藏层 --\u003e 输出层

序列图也可以使用 Mermaid 语法绘制,例如:
 sequenceDiagramparticipant 输入层
 participant 隐藏层
 participant 输出层
 输入层 -\u003e\u003e 隐藏层: 传递数据
 隐藏层 -\u003e\u003e 输出层: 传递数据

五、图神经网络的应用领域

1. 节点分类

预测节点标签的方法
节点分类是图神经网络的重要应用之一,其目的是预测图中每个节点的标签。在实际应用中,节点可能代表各种实体,如社交网络中的用户、生物网络中的蛋白质、交通网络中的路口等,而节点的标签则可能表示用户的兴趣爱好、蛋白质的功能、路口的交通流量等级等。
使用图神经网络进行节点分类的方法通常包括以下步骤:首先,将图数据输入到图神经网络中,通过消息传递和信息聚合的过程,让每个节点收集其邻居节点的信息。然后,利用这些信息更新节点的特征表示。最后,将更新后的节点特征输入到分类器中,预测节点的标签。
例如,在社交网络分析中,可以使用图神经网络来预测用户的兴趣爱好。通过分析用户之间的关注关系(边)和用户的个人资料信息(节点特征),图神经网络可以学习到用户之间的相似性和关联性,从而更准确地预测用户的兴趣爱好。

2. 链接预测

预测图中实体关系的应用
链接预测是图神经网络的另一个重要应用领域,其目标是预测图中两个节点之间是否存在链接。在实际应用中,链接预测可以用于社交网络中的朋友推荐、生物网络中的蛋白质相互作用预测、电商网络中的商品推荐等。
使用图神经网络进行链接预测的方法通常基于节点的特征和图的结构信息。首先,通过图神经网络学习节点的特征表示,这些特征表示包含了节点的局部结构信息和全局结构信息。然后,利用这些特征表示计算两个节点之间存在链接的可能性。
例如,在社交网络中,可以使用图神经网络来预测用户之间是否会成为朋友。通过分析用户的社交关系图和用户的个人资料信息,图神经网络可以学习到用户之间的相似性和关联性,从而预测用户之间是否存在潜在的朋友关系。

3. 图聚类

划分图节点的方法
图聚类是将图中的节点划分成不同的簇,使得同一簇中的节点具有较高的相似性,而不同簇中的节点具有较低的相似性。图聚类在数据挖掘、机器学习、生物信息学等领域有广泛的应用,例如社区发现、图像分割、蛋白质功能预测等。
使用图神经网络进行图聚类的方法通常包括以下步骤:首先,将图数据输入到图神经网络中,通过消息传递和信息聚合的过程,让每个节点收集其邻居节点的信息。然后,利用这些信息更新节点的特征表示。最后,使用聚类算法对更新后的节点特征进行聚类,将图中的节点划分成不同的簇。
例如,在社交网络分析中,可以使用图神经网络进行社区发现。通过分析用户之间的社交关系图和用户的个人资料信息,图神经网络可以学习到用户之间的相似性和关联性,从而将用户划分成不同的社区。

4. 图分类

将图分类为类别的应用
图分类是将给定的图数据分类到不同的类别中。图分类在化学、生物学、计算机视觉等领域有广泛的应用,例如分子结构分类、蛋白质功能分类、图像分类等。
使用图神经网络进行图分类的方法通常包括以下步骤:首先,将图数据输入到图神经网络中,通过消息传递和信息聚合的过程,让每个节点收集其邻居节点的信息。然后,利用这些信息更新节点的特征表示。最后,将更新后的节点特征进行聚合,得到整个图的特征表示。最后,将图的特征表示输入到分类器中,预测图的类别。
例如,在化学领域中,可以使用图神经网络对分子结构进行分类。通过分析分子的图结构和原子的属性信息,图神经网络可以学习到分子的特征表示,从而预测分子的化学性质和功能。

5. 计算机视觉领域的应用

  • 生成感兴趣区域和图像分类 在计算机视觉领域,图神经网络也有广泛的应用。其中,生成感兴趣区域和图像分类是两个重要的应用方向。
    • 生成感兴趣区域是指在图像中自动识别出可能包含目标物体的区域。使用图神经网络可以将图像中的像素点看作图的节点,将像素点之间的关系看作图的边,通过图神经网络的消息传递和信息聚合过程,让每个像素点收集其周围像素点的信息,从而识别出可能包含目标物体的感兴趣区域。
    • 图像分类是指将图像分类到不同的类别中。使用图神经网络可以将图像中的像素点看作图的节点,将像素点之间的关系看作图的边,通过图神经网络的消息传递和信息聚合过程,让每个像素点收集其周围像素点的信息,从而得到整个图像的特征表示。最后,将图像的特征表示输入到分类器中,预测图像的类别。

例如,在目标检测任务中,可以使用图神经网络生成感兴趣区域。通过分析图像中的像素点之间的关系,图神经网络可以自动识别出可能包含目标物体的区域,从而提高目标检测的准确性。在图像分类任务中,可以使用图神经网络对图像进行分类。通过分析图像中的像素点之间的关系,图神经网络可以学习到图像的特征表示,从而更准确地预测图像的类别。

六、总结

Python 中的图神经网络编程在各个领域都展现出了巨大的潜力。通过本文对图神经网络的深入探讨和多个编程例子的展示,我们可以看到图神经网络在处理复杂图结构数据方面的强大能力。

(一)总结 Python 图神经网络编程的关键内容

  1. 图神经网络基础概念:了解了图神经网络的定义、特点以及与传统神经网络的区别。明确了图的基本概念,包括节点、顶点、有向图和无向图,以及它们的表示方式。
  2. 使用 Python 库进行编程:掌握了 NetworkX 库和 PyTorch Geometric 库的使用方法。通过 NetworkX
    库可以方便地创建和操作图,进行可视化。而 PyTorch Geometric
    库则提供了更强大的功能,用于数据准备、模型构建、训练和评估。
  3. 编程例子丰富多样:从绘制神经网络图到实现图卷积网络、表示特定网络、绘制神经网络结构图,以及在不同应用领域的实践,如节点分类、链接预测、图聚类、图分类和计算机视觉领域的应用。

(二)展望未来的发展方向

  1. 技术创新:随着研究的不断深入,图神经网络的技术将不断创新。例如,探索更高效的图卷积方法、注意力机制的进一步应用、多模态图神经网络的发展等。像
    ProG 这样的统一 Python 库为图提示学习带来了新的机遇,未来可能会有更多类似的工具出现,简化图神经网络的应用和开发。
  2. 应用拓展:图神经网络将在更多领域得到广泛应用。除了本文中提到的领域,还可以在金融、物流、能源等领域发挥重要作用。例如,在金融风险评估中,利用图神经网络分析企业之间的关联关系,预测违约风险;在物流网络优化中,通过图神经网络优化配送路线,提高效率。
  3. 性能提升:随着硬件技术的不断进步,图神经网络的训练和推理速度将得到显著提升。同时,优化算法和模型结构,减少内存占用,提高模型的可扩展性,将使图神经网络能够处理更大规模的图数据。
  4. 与其他技术融合:图神经网络可以与其他人工智能技术相结合,如深度学习、强化学习等,发挥各自的优势,解决更复杂的问题。例如,将图神经网络与强化学习结合,用于智能交通系统中的路径规划和交通流量控制。
  5. 开源社区的推动:开源社区将继续为图神经网络的发展做出贡献。更多的开发者将分享他们的代码和经验,促进图神经网络技术的普及和创新。像
    Spektral 这样的项目为开发者提供了强大的工具和资源,未来会有更多优秀的开源项目涌现。

总之,Python 图神经网络编程有着广阔的发展前景。随着技术的不断进步和应用领域的不断拓展,图神经网络将为解决各种实际问题提供更强大的工具和方法。让我们共同期待图神经网络

标签:torch,Python,self,编程,edge,神经网络,num,节点
From: https://blog.csdn.net/zheng_ruiguo/article/details/144324989

相关文章

  • Day43--GUI编程简介
    Day43--GUI编程简介GUI是GraphicalUserInterface的缩写,即图形用户界面。它是指采用图形方式显示的计算机操作用户界面,使用户可以通过视觉元素如窗口、图标、菜单等直观地与计算机进行交互,而无需记忆和输入复杂的命令行指令。GUI的定义和组成定义:GUI是一种人与计算机通信的界......
  • Python实现菱形
    笔记row=eval(input('请输入菱形的行数:'))whilerow%2==0:#判断行数的奇偶性,行数是偶数,重新输入行数print('请重新输入行数')row=eval(input('请输入菱形的行数:'))#输出菱形top_row=(row+1)//2#上半部分的行数#上半部分foriinrange(1,top_row+1):#......
  • 基于Python+Django的健身房课程预约平台设计与实现
    ......
  • Python内存管理的秘密,你必须知道的高效编程技巧!
    Python内存管理的秘密,你必须知道的高效编程技巧!前言亲爱的Python爱好者们,大家好!......
  • 轴承寿命预测 | 基于BP神经网络的轴承寿命预测附matlab完整代码
    轴承寿命预测|基于BP神经网络的轴承寿命预测附matlab完整代码数据划分:将数据集划分为训练集、验证集和测试集,通常采用时间序列数据的方式进行划分。构建模型:设计BP模型结构,确保模型能够有效学习时间序列数据的特征。模型训练:使用训练集对BP模型进行训练,优化模型参数以......
  • python基于flask框架的健身俱乐部网站的设计与实现 9713c
    文章目录项目介绍具体实现截图开发技术系统性能核心代码部分展示源码/演示视频获取方式项目介绍计一款高效便捷的健身俱乐部网站系统对于提升健身俱乐部的管理水平和会员服务质量具有重要意义。本系统基于django框架,实现业务逻辑和数据管理。系统主要功能包括会员管......
  • python 自定义进度条
    defprintProgressBar(iteration,total,prefix='',suffix='',decimals=1,length=100,fill='█',printEnd="\r"):"""Callinalooptocreateterminalprogressbar@params:iteratio......
  • 如果同事编程能力比你低,你是如何与他合作的?反之呢?
    如果同事的前端编程能力比我低,我会采取以下策略与他合作:耐心和尊重:每个人的学习速度和经验不同,我会尊重同事的水平,并以耐心和鼓励的态度对待他。避免任何居高临下或贬低的行为。提供指导和帮助:当同事遇到问题时,我会乐于提供帮助,解释概念,并指导他找到解决方案。我会尽量用清晰......
  • Python CGI编程
    什么是CGICGI目前由NCSA维护,NCSA定义CGI如下:CGI(CommonGatewayInterface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户端HTML页面的接口。网页浏览为了更好的了解CGI是如何工作的,我们可以从在网页上点击一个链接或URL的流程:1、使用你......
  • python: pyQt6 table paging
     #encoding:utf-8#版权所有2024涂聚文有限公司#许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎#描述:#Author:geovindu,GeovinDu涂聚文.#IDE:PyCharm2023.1python3.11#os:windows10#database:mysql9.0sqlserve......