使用Python,networkx构造有向图及无向图以及图合并等api
使用Python,networkx构造有向图及无向图以及图合并等api
- 源码
- 图的构造、节点及边的添加等
- 有向图及无向图及多重图
- 参考
方法名 | 方法作用 |
---|---|
subgraph(G, nbunch) | 返回包含nbunch节点的子图 |
union(G, H[, rename]) | 合并G和H图 |
disjoint_union(G, H) | 合并G和H图 |
cartesian_product(G, H) | 返回G和H的笛卡尔积 |
compose(G, H) | 组合G和H图,通过把节点和边都合并到一个图中 |
complement(G) | 返回G图的全集 |
create_empty_copy(G[, with_data]) | 返回G的复制图,包括所有节点,删除全部边 |
to_undirected(graph) | 转换G图为无向图 |
to_directed(graph) | 转换G图为有向图 |
源码
图的构造、节点及边的添加等
'''
networkx绘制图相关api
'''import networkx as nx
from networkx.classes.coreviews import AtlasView
from networkx.classes.reportviews import NodeDataView# 创建一个没有节点和边缘的空图
G = nx.Graph()# 添加节点
G.add_node(1)# 一次性添加多个节点
G.add_nodes_from([2, 3])# 一次性添加多个节点及属性 (node,node_attribute_dict)
G.add_nodes_from([(4, {"color": "red"}), (5, {"color": "green"})])# 一个图中的节点合并到另一个图中
H = nx.path_graph(10)
G.add_nodes_from(H) # 或者 G.add_node(H)# 添加边
G.add_edge(1, 2)
e = (2, 3)
G.add_edge(*e) # unpack edge tuple*# 添加边列表
G.add_edges_from([(1, 2), (1, 3)])# 添加H图的一堆边
G.add_edges_from(H.edges)# 删除所有节点和边
G.clear()# 添加节点和边缘
G.add_edges_from([(1, 2), (1, 3)])
G.add_node(1)
G.add_edge(1, 2)
G.add_node("spam") # adds node "spam"
G.add_nodes_from("spam") # adds 4 nodes: 's', 'p', 'a', 'm'
G.add_edge(3, 'm')print('num of nodes: ', str(G.number_of_nodes()))
print('num of edges: ', str(G.number_of_edges()))# 输出图的边的顺序
# G.edges 的顺序是邻接的顺序 其中包括节点的顺序和每个 node 的邻接关系。
DG = nx.DiGraph()
DG.add_edge(2, 1) # adds the nodes in order 2, 1
DG.add_edge(1, 3)
DG.add_edge(2, 4)
DG.add_edge(1, 2)
assert list(DG.successors(2)) == [1, 4]
assert list(DG.edges) == [(2, 1), (2, 4), (1, 3), (1, 2)]# 检查图形的元素:节点、边、邻接关系、度数(点的复杂度,邻接边的个数)
print(list(G.nodes)) # [1, 2, 3, 'spam', 's', 'p', 'a', 'm']
print(list(G.edges)) # [(1, 2), (1, 3), (3, 'm')]
print(list(G.adj[1])) # or list(G.neighbors(1)) # [2, 3]
print(G.degree[1]) # the number of edges incident to 1# 可以指定报告所有节点子集的边数和度数
print(G.edges([2, 'm']))
# EdgeDataView([(2, 1), ('m', 3)])
print(G.degree([2, 3]))
# DegreeView({2: 1, 3: 2})# 从图形中删除元素、删除边
G.remove_node(2)
G.remove_nodes_from("spam")
print('after del: ', list(G.nodes)) # [1, 3, 'spam']
G.remove_edge(1, 3)
print('after del: ', list(G.edges))# 使用图形构造函数构建图
G.add_edge(1, 2)
H = nx.DiGraph(G) # create a DiGraph using the connections from G
print(list(H.edges())) # [(1, 2), (2, 1)]
edgelist = [(0, 1), (1, 2), (2, 3)]
H = nx.Graph(edgelist) # create a graph from an edge list
print(list(H.edges())) # [(0, 1), (1, 2), (2, 3)]
adjacency_dict = {0: (1, 2), 1: (0, 2), 2: (0, 1)}
H = nx.Graph(adjacency_dict) # create a Graph dict mapping nodes to nbrs
print(list(H.edges())) # [(0, 1), (0, 2), (1, 2)]# 可以使用下标法访问edges和neighbors
G = nx.Graph([(1, 2, {"color": "yellow"})])
print(G[1]) # same as G.adj[1]
AtlasView({2: {'color': 'yellow'}})
print(G[1][2]) # {'color': 'yellow'}
print(G.edges[1, 2]) # {'color': 'yellow'}# 可以使用下标表示法获取/设置边的属性 如果 Edge 已存在。
G.add_edge(1, 3)
G[1][3]['color'] = "blue"
G.edges[1, 2]['color'] = "red"
print(G.edges[1, 2])# 实现对所有(节点、邻接)对的快速检查。 请注意,对于无向图,邻接迭代会将每条边看到两次。G.adjacency()G.adj.items()
FG = nx.Graph()
FG.add_weighted_edges_from([(1, 2, 0.125), (1, 3, 0.75), (2, 4, 1.2), (3, 4, 0.375)])
for n, nbrs in FG.adj.items():for nbr, eattr in nbrs.items():wt = eattr['weight']if wt < 0.5: print(f"({n}, {nbr}, {wt:.3})")# 通过 edges 属性可以方便地访问所有边缘, 相比items进行打印避免了节点的重复打印
for (u, v, wt) in FG.edges.data('weight'):if wt < 0.5:print(f"\t({u}, {v}, {wt:.3})")# 在创建新图表时分配图表属性
G = nx.Graph(day="Friday")
print(G.graph) # {'day': 'Friday'}
# 或者可以稍后修改属性
G.graph['day'] = "Monday"
print(G.graph) # {'day': 'Monday'}# 添加节点属性add_node()add_nodes_from()G.nodes
G.add_node(1, time='5pm')
G.add_nodes_from([3], time='2pm')
print(G.nodes[1]) # {'time': '5pm'}
G.nodes[1]['room'] = 714
print(G.nodes.data())
NodeDataView({1: {'time': '5pm', 'room': 714}, 3: {'time': '2pm'}})# 添加/更改边缘属性 或下标表示法。add_edge() add_edges_from()
G.add_edge(1, 2, weight=4.7 )
G.add_edges_from([(3, 4), (4, 5)], color='red')
G.add_edges_from([(1, 2, {'color': 'blue'}), (2, 3, {'weight': 8})])
G[1][2]['weight'] = 4.7
G.edges[3, 4]['weight'] = 4.2
print(G.edges)
print(G.edges.data())
有向图及无向图及多重图
'''
有向图及无向图,以及一些公共api
'''
import networkx as nx
from networkx import to_directed, to_undirected, create_empty_copy, subgraph, union, disjoint_union, cartesian_product, \compose, complement# 有向图
DG = nx.DiGraph()
DG.add_weighted_edges_from([(1, 2, 0.5), (3, 1, 0.75)])
print(DG.out_degree(1, weight='weight')) # 0.5
print(DG.degree(1, weight='weight')) # 1.25
print(list(DG.successors(1))) # [2]
print(list(DG.neighbors(1))) # [2]# 有些算法仅适用于有向图,而其他算法则效果不佳 为有向图定义。事实上,将 而无向图在一起是危险的。
H = nx.Graph(DG) # 从有向图G构建一个无向图# 多重图 NetworkX 为允许多条边的图形提供了类 在任意一对节点之间。允许您添加相同的边两次,可能使用不同的 边缘数据。
MG = nx.MultiGraph()
MG.add_weighted_edges_from([(1, 2, 0.5), (1, 2, 0.75), (2, 3, 0.5)])
print(dict(MG.degree(weight='weight'))) # {1: 1.25, 2: 1.75, 3: 0.5}
GG = nx.Graph()
for n, nbrs in MG.adjacency():for nbr, edict in nbrs.items():minvalue = min([d['weight'] for d in edict.values()])GG.add_edge(n, nbr, weight=minvalue)print(nx.shortest_path(GG, 1, 3)) # [1, 2, 3]print(subgraph(GG, nbunch=2)) # 返回包含nbunch的GG的所有子图
print('subgraph', list(subgraph(GG, nbunch=2)))graph1 = nx.Graph([(8, 9, {"color": "yellow"}), (9, 10, {"color": "red"})])
print(union(graph1, GG)) # 返回俩个图的合集
print('union', union(graph1, GG).edges.data(), '\n')graph1 = nx.Graph([(111, 222, {"color": "yellow"}), (222, 333, {"color": "red"}), (1, 2, {"color": "green"})])
print(disjoint_union(graph1, GG)) # 返回俩个图的合集
print('disjoint_union', disjoint_union(graph1, GG).edges.data(), '\n')graph1 = nx.Graph([(111, 222, {"color": "yellow"})])
print(cartesian_product(graph1, GG)) # 返回G和H的Cartesian
print('cartesian_product', cartesian_product(graph1, GG).edges.data(), '\n')print(compose(graph1, GG)) # 返回G和H合并为一个图后的组合结果
print('compose', compose(graph1, GG).edges.data(), '\n')print(complement(GG)) # 返回G的完整结果
print('complement', complement(GG).edges.data(), '\n')print(to_directed(GG)) # 返回有向图
print('to_directed', to_directed(GG).edges.data(), '\n')print(to_undirected(GG)) # 返回无向图
print('to_undirected', to_undirected(GG).edges.data(), '\n')print(create_empty_copy(GG)) # 构建一个GG图的复制并移除所有的边
print('create_empty_copy', create_empty_copy(GG).nodes)
参考
- https://networkx.org/documentation/latest/tutorial.html#accessing-edges-and-neighbors
相关文章:
使用Python,networkx构造有向图及无向图以及图合并等api
使用Python,networkx构造有向图及无向图以及图合并等api 源码图的构造、节点及边的添加等有向图及无向图及多重图 参考 方法名方法作用subgraph(G, nbunch)返回包含nbunch节点的子图union(G, H[, rename])合并G和H图disjoint_union(G, H)合并G和H图cartesian_produc…...
【SOC 芯片设计 DFT 学习专栏 -- 测试向量生成 ATPG (Automatic Test Pattern Generation) 】
文章目录 OverviewATPG 的基本功能ATPG 的工作流程ATPG 应用场景示例示例 1:检测单个信号的 Stuck-at Fault示例 2:针对 Transition Fault 的 ATPG ATPG 工具与常用工具链ATPG 优化与挑战 Overview 本文主要介绍 DFT scan 中的 ATPG 功能。在 DFT (Desi…...
uniapp本地加载腾讯X5浏览器内核插件
概述 TbsX5webviewUTS插件封装腾讯x5webview离线内核加载模块,可以把uniapp的浏览器内核直接替换成Android X5 Webview(腾讯TBS)最新内核,提高交互体验和流畅度。 功能说明 下载SDK插件 1.集成x5内核后哪些页面会由x5内核渲染? 所有plus…...
树莓派之旅-在wsl-x86-64 上进行树莓派的交叉编译
前情提要: 想把自己花里胡哨的终端丢到树莓派上去,可是树莓派算力不够,编译时间过于漫长 交叉编译 定义网上有,懒得复制了,大概就是在本机电脑上编译目标平台的可执行文件 这里的目标平台是树莓派 使用 uname -m …...
JavaScript中Map与Object的区别
在JavaScript中,Map和Object是用于存储键值对数据的两种不同的数据结构(Map是ES6新增的数据结构),它们在构造方式、键的类型以及原型继承等方面存在区别。 一、主要区别 1.构造方式 Map:Map只能通过构造函数new Map…...
基于嵌入式无人机UAV通信系统的实时最优资源分配算法matlab仿真
目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于嵌入式无人机UAV通信系统的实时最优资源分配算法matlab仿真。具体参考文献: 考虑使用UAV作为中继辅助节点的设备到设备(D2D)无线信息和…...
计算机网络 (20)高速以太网
一、发展背景 随着计算机技术和网络应用的不断发展,传统的以太网速率已逐渐无法满足日益增长的带宽需求。因此,高速以太网应运而生,它以提高数据传输速率为主要目标,不断推动着以太网技术的发展。 二、技术特点 高速传输ÿ…...
element ui 组件 时间选择器出现转换问题的解决办法
在使用时间选择器添加数据是会出现转换失败问题 vue中代码为: 解决办法: 在el-date-picker中添加 format 和 value-format...
当知识图谱遇上文本智能处理,会擦出怎样的火花?
目前以理解人类语言为入口的认知智能成为了人工智能发展的突破点,而知识图谱则是迈向认知智能的关键要素。达观数据在2018AIIA人工智能开发者大会承办的语言认知智能与知识图谱公开课上,三位来自企业和学术领域的专家分别从不同角度讲述的知识图谱的应用…...
SpringBootWeb案例-1
文章目录 SpringBootWeb案例1. 准备工作1.1 需求&环境搭建1.1.1 需求说明1.1.2 环境搭建 1.2 开发规范 2. 部门管理2.1 查询部门2.1.1 原型和需求2.1.2 接口文档2.1.3 思路分析2.1.4 功能开发2.1.5 功能测试 2.2 前后端联调2.3 删除部门2.3.1 需求2.3.2 接口文档2.3.3 思路…...
在正则表达式中,\1 是用来引用第一个捕获组的内容的。捕获组是用括号 () 包裹的部分
在正则表达式中,\1 是用来引用第一个捕获组的内容的。捕获组是用括号 () 包裹的部分,它们会保存正则表达式匹配到的内容。在替换操作中,\1 就是对第一个捕获组内容的引用,表示你希望将捕获组中的内容放到替换文本中的某个位置。 …...
免费下载 | 2024年具身大模型关键技术与应用报告
这份报告的核心内容涉及具身智能的关键技术与应用,主要包括以下几个方面: 具身智能的定义与重要性: 具身智能是基于物理身体进行感知和行动的智能系统,通过与环境的交互获取信息、理解问题、做出决策并实现行动,产生智…...
[API测试] Karate 之独立运行方式
在 Karate 介绍与快速示例(API测试自动化、模拟、性能测试与UI自动化工具) 这一篇中介绍了如何在Maven项目中,如何结合JUnit 运行 Karate的API测试, 如果是专职的QA人员来测试, 对Java语言或者Maven完全不熟悉的话要怎么来运行 Karate的测试呢? 答案就是使用Karate的独立运…...
WeNet:面向生产的流式和非流式端到端语音识别工具包
这篇文章介绍了WeNet,一个面向生产的开源端到端(E2E)语音识别工具包。WeNet的主要特点和贡献如下: 统一流式和非流式识别:提出了一种名为U2的两阶段框架,能够在单一模型中同时支持流式和非流式语音识别&…...
《我在技术交流群算命》(二):QGraphicsItem怎么写自定义信号啊(QObject多继承顺序问题)
某位群友突然无征兆的抛出以下问题: QGraphicsItem怎么写自定义信号啊 看到这个问题的时候我是比较疑惑的,按鄙人对 Qt 的了解,自定义信号只需: 继承QObject类中加入Q_OBJECT宏声明一个信号并使用 但该群友毕竟也不是一个Qt新手࿰…...
实践深度学习:构建一个简单的图像分类器
引言 深度学习在图像识别领域取得了巨大的成功。本文将指导你如何使用深度学习框架来构建一个简单的图像分类器,我们将以Python和TensorFlow为例,展示从数据准备到模型训练的完整流程。 环境准备 在开始之前,请确保你的环境中安装了以下工…...
实践:事件循环
实践:事件循环 代码示例 console.log(1); setTimeout(() > console.log(2), 0); Promise.resolve(3).then(res > console.log(res)); console.log(4);上述的代码的输出结果是什么 1和4肯定优先输出,因为他们会立即方式堆栈的执行上下文中执行&am…...
基于Python的医院预约挂号与诊断系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
计算机网络基础
文章目录 名词含义1.应用层1.1网络应用原理1.1.1网络应用体系1.1.2进程通信1.1.3可供程序使用的运输服务1.1.4因特网的运输服务1.1.5应用层协议 1.2WEB和HTTP1.2.1HTTP概述1.2.2持续与非持续连接1.2.3报文格式 名词含义 ISP(Internet Service Provider,因特网服务提…...
Rabbitmq追问1
如果消费端代码异常,未手动确认,那么这个消息去哪里 2024-12-31 21:19:12 如果消费端代码发生异常,未手动确认(ACK)的情况下,消息的处理行为取决于消息队列的实现和配置,以下是基于 RabbitMQ …...
基于SpringBoot和OAuth2,实现通过Github授权登录应用
基于SpringBoot和OAuth2,实现通过Github授权登录应用 文章目录 基于SpringBoot和OAuth2,实现通过Github授权登录应用0. 引言1. 创建Github应用2. 创建SpringBoot测试项目2.1 初始化项目2.2 设置配置文件信息2.3 创建Controller层2.4 创建Html页面 3. 启动…...
python数据分析:使用pandas库读取和编辑Excel表
使用 Pandas,我们可以轻松地读取和写入Excel 文件,之前文章我们介绍了其他多种方法。 使用前确保已经安装pandas和 openpyxl库(默认使用该库处理Excel文件)。没有安装的可以使用pip命令安装: pip install pandas ope…...
SpringCloud源码分析-Lettue Redis
redis connection异步发送 底层是nio channel...
Linux(13)——网络概述
目录 一、TCP/IP 网络模型: 1、应用层(Application): 2、传输层(Transport): 3、互联网层(Internet or network): 4、链路层(Link࿰…...
PHP框架+gatewayworker实现在线1对1聊天--聊天界面布局+创建websocket连接(5)
文章目录 聊天界面布局html代码 创建websocket连接为什么要绑定? 聊天界面布局 在View/Index目录下创建index.html html代码 <div id"chat"><div id"nbar"><div class"pull-left">与牛德胜正在聊天...</div…...
Qos的详细解释
QoS(Quality of Service),即服务质量,是一种用于网络管理的技术,旨在确保不同类型的数据流(如语音、视频、文件传输等)在网络中按优先级和要求得到适当的带宽、延迟、抖动和丢包率等服务&#x…...
未来20年在大语言模型相关研究方向--大语言模型的优化与改进
未来20年在大语言模型相关研究方向 模型性能优化 模型架构创新:研究新型的模型架构,如探索更高效的Transformer变体、融合递归神经网络(RNN)和卷积神经网络(CNN)的优点,以提高模型的性能、可扩展性和适应性,满足不同应用场景对模型效率和效果的要求。高效训练算法:开…...
【Vue】vue-router使用addRoute动态加载路由后刷新页面404
场景:动态加载路由,点击菜单路由跳转正常,但刷新页面报404 原因:使用404做异常路由捕获 刷新页面会导致路由丢失,重建路由时先加载了静态路由(包含异常路由捕获404),此时动态路由还未…...
《计算机组成及汇编语言原理》阅读笔记:p177-p177
《计算机组成及汇编语言原理》学习第 13 天,p177-p177 总结,总计 1 页。 一、技术总结 1.real mode A programming model where the program has access to the entire capability of the machine, bypassing security and memory management. Useful…...
《从入门到精通:蓝桥杯编程大赛知识点全攻略》(一)-递归实现指数型枚举、递归实现排列型枚举
本篇博客将聚焦于通过递归来实现两种经典的枚举方法:指数型枚举和排列型枚举。这两种枚举方式在计算机科学和算法竞赛中都有广泛应用,无论是在解题中,还是在实际工作中都极具价值。 目录 前言 斐波那契数列递归 递归实现指数型枚举 算法思…...
游泳溺水识别数据集,对25729张图片进行YOLO,COCO JSON, VOC XML 格式的标注,溺水平均识别率在89.9%
游泳溺水识别数据集,对25729张图片进行YOLO,COCO JSON, VOC XML 格式的标注,溺水识别率在92% 训练结果 数据集和标签 验证 游泳测试视频 根据测试的视频来获取检测结果: 游泳测试视频的置信度设置60% 检测结果如下&…...
coredns报错plugin/forward: no nameservers found
coredns报错plugin/forward: no nameservers found并且pod无法启动 出现该报错原因 是coredns获取不到宿主机配置的dns地址 查看宿主机是否有dns地址 resolvectl status 我这里是配置正确后,如果没配置过以下是不会显示出dns地址的 给宿主机增加静态dns地址之后将…...
【欢迎讨论方案一的可行性】SpringBoot集成netty,在handler中调用@Component注解的类
在Netty中处理请求时,调用一个由Spring Boot管理的Component注解的类 在Netty中处理请求时,调用一个由Spring Boot管理的Component注解的类,需要确保Spring上下文能够正确地注入这些组件。 方法一:使用Autowired注入Spring组件 …...
如何在LaTeX文档中为脚注添加横线,并调整横线的长度和厚度。
当然,以下是一个简单的例子,展示了如何在LaTeX文档中使用scrextend宏包来为脚注添加横线,并调整横线的长度和厚度。 ### 步骤1:导入scrextend宏包 在你的LaTeX文档的导言区(\begin{document}之前的部分)&…...
【C语言】可移植性陷阱与缺陷(三):整数的大小
目录 一、概述 二、整数类型的大小差异 三、 跨平台代码中的整数大小问题 3.1. 内存使用 3.2. 性能问题 3.3. 数据截断 3.4. 序列化/反序列化 四、解决整数大小问题的策略 4.1. 使用固定大小的整数类型 4.2. 条件编译 4.3. 避免假设 4.4. 文档化 五、总结 在C语言编…...
nginx基础篇 - 控制命令详解:启动/停止、配置文件检查/重新加载、nginx平滑升级
文章目录 1. nginx命令2 使用Unix工具发送信号3 常用操作3.1 检查配置文件3.2 启动nginx3.3 停止nginx3.4 重启nginx 4 平滑升级nginx 1. nginx命令 执行nginx -h命令可以看到所有的nginx命令及其解释: nginx命令使用方法: nginx [-?hvVtTq] [-s signal] [-p p…...
汽车驾校转型做无人机执照培训详解, “驾” 起无人机培训新未来?
汽车驾校转型做无人机执照培训,这一趋势确实在一定程度上预示着无人机培训领域的新未来。以下是对这一转型的详细分析: 一、转型背景 1. 无人机行业快速发展: 无人机技术在农业、影视、安防、物流等多个领域的应用不断拓展,市场…...
如何科学评估与选择新版本 Python 编程语言和工具
文章目录 摘要引言评估新版本的关键因素适用性评估成本与收益分析 新版本功能的实际应用示例代码模块详细解析示例代码模块代码模块解析实际应用场景如何运行与配图 QA环节总结参考资料 摘要 随着技术的快速发展,编程语言和软件工具不断推出新版本,带来…...
TS中的enum变量和普通object区别
文章目录 一、定义二、编译后的输出三、类型安全四、使用场景五、混合使用 这两种数据经常混用,但是也有一定区别,特殊情况下混用会报错 一、定义 enum变量通常用使用常量object则没有限制值的类型 // 案例 enum Direction {Up,Down,Left,Right } const …...
SOT23-6封装小功率H桥常用直流电机、磁保持继电器驱动芯片大全
H桥常用直流电机、磁保持继电器驱动芯片大全 前言替换规则 引脚定义1:GR6205 | 2~5.5V | 200mAFM116C | 2.5V~5V | 500mATMI8118 | 1.6V~7.2V | 1.35AMX116L | 2~7V | 500mAMX116H | 2~8V | 800/1000 mAHT7K1201 | 1.8…...
Spring中的反射
反射是框架设计的灵魂,它可以使框架更加灵活和可扩展。框架是一种半成品软件,可以在其基础上进行软件开发,极大地简化了编码过程。而反射机制则是将类的各个组成部分封装为其他对象,对类进行解剖。通过反射,我们可以在…...
5.12--DenseNet
1.网络结构介绍 DenseNet最大的特点是对相同大小的特征图来说,每一层都与前馈层和后序层相连,以及两层之间是拼接起来的而不是简单的相加。该网络主要由Dense块和Transition层组成。 结构介绍: 密集连接:每层都和前馈层和后面的…...
PeaZip:支持200+格式,跨平台解压工具,安全又高效
PeaZip 作为一款功能全面的压缩工具,不仅完全免费且开源,兼容多种主流操作系统,包括 Windows、Linux 和 macOS。它不仅支持常见的压缩格式如 ZIP、RAR、7Z、TAR 和 GZIP,还能处理超过 200 种不同的文件格式,满足用户多…...
go项目使用gentool生成model的gen.go问题
Gen Tool 是一个没有依赖关系的二进制文件,可以用来从数据库生成结构。 使用方法: go install gorm.io/gen/tools/gentoollatest在项目根目录,执行连接的数据库中指定某几张表结构生成数据库model层 gentool -dsn "root:123456tcp(localhost:330…...
物理知识1——电流
说起电流,应该从电荷说起,而说起电荷,应该从原子说起。 1 原子及其结构 常见的物质是由分子构成的,而分子又是由原子构成的,有的分子是由多个原子构成,有的分子只由一个原子构成。而原子的构成如图1所示。…...
VDSuit-FuLL全身惯性动捕设备在人形机器人遥操作的具体应用
随着具身智能的火热,人形机器人遥操作的话题又回到了大众视野。人形机器人的遥操作有众多实现方案,其中基于动作捕捉设备进行人形机器人的遥操作成为了目前业内讨论较多的方向。动作捕捉指的是一种可以实时跟踪、记录、重建角色运动轨迹,并将…...
从零开始学TiDB(8) TiFlash 主要架构
一.TiFlash的主要架构 二.TiFlash 主要功能 1.异步复制 2.一致性读取 T0 时刻从客户端写入两行数据 k1 value100 k999 value7 分别写入到了两个region,并且产生raft log 此时TiFlash还没有TiKV的这两行数据 此时TiFlash同步了key1 value100的数据 还没有同步 …...
LeetCode题解:2625. 扁平化嵌套数组,递归
原题链接 https://leetcode.cn/problems/flatten-deeply-nested-array/ 题目解析 题目要求我们将一个多维数组扁平化到指定的深度。具体来说,我们需要将数组中的子数组扁平化,直到达到给定的深度n。如果子数组的深度大于n,则不进行扁平化。…...
基于深度学习的视觉检测小项目(五) 项目真正的开端
之前的所有都是项目概况和基础知识的铺垫,从今天开始真正进入项目。 首先明确一下项目的流程: • 任务分解分块,并作出每一块的大致功能规划 • 拆解工种,任务分派,约定工种间的接口方式和数据交互方式 • 按照任务块…...
使用ExecutorService和@Async来使用多线程
文章目录 使用ExecutorService和Async来使用多线程采用ExecutorService来使用多线程多线程过程的详细解释注意事项优点 使用Async来使用多线程对比Async和ExecutorService的多线程使用方式使用 ExecutorService 的服务类使用 Async 的服务类异步任务类自定义线程池主应用类解释…...