【python视图1】networkx操作Graph图

2023-05-16

目录

一、说明

二、生成图(Creating a graph)

2.1 创建一个没有节点和边的空图。

2.2 在空图追加节点

2.3 追加边(Edges)

 2.4 删除节点

2.5 查询

三、使用图内节点和边(nodes and edges)

3.1 访问边(edges)

3.2 给图节点边 graphs, nodes, and edges加属性

3.2.1 给图加属性(Graph attributes)

3.2.2 节点属性(Node attributes)

3.2.3 节点属性Edge Attributes

四、多种有向图

4.1 有向图Directed graphs

4.2 多向图(Multigraphs)

五、图生成和图操作(generators and graph operations)

六、图论函数分析Analyzing graphs

七 画图函数Drawing graphs


一、说明

        数据可视化需要显示种种数据,matplotlib负责曲线类画图,然而类似于图论的操作用什么方法。这里用networkx程序包完成。本文专门介绍这种程序包的用法。

二、生成图(Creating a graph)

2.1 创建一个没有节点和边的空图。

import networkx as nx
G = nx.Graph()

注释

        根据定义,图是节点(顶点)以及已识别的节点对(称为边、链接等)的集合。在 NetworkX 中,节点可以是任何可哈希对象,例如文本字符串、图像、XML 对象、另一个图形、自定义节点对象等。

        Python 的 None 对象不应用作节点,因为它确定是否已在许多函数中分配可选函数参数。

2.2 在空图追加节点

        图 G 可以通过多种方式增长。 NetworkX 包括许多图形生成器函数和设施,用于以多种格式读取和写入图形。开始之前,我们先看看简单的操作。

  •  您可以一次添加一个节点,
 G.add_node(1)

示例1: 追加节点 

import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
G.add_node(1)
G.add_node(2)
G.add_node(3)
nx.draw(G, node_color='green')
plt.show()

  • 添加节点列表
G.add_nodes_from([2, 3])

 示例2: 追加节点 

# import required module
import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
G.add_nodes_from([0,1,2, 3,4])
nx.draw(G, node_color='green')
plt.show()

  • 或添加任何 nbunch 节点。 nbunch 是节点的任何可迭代容器,它本身不是图中的节点。 (例如列表、集合、图形、文件等。)
H = nx.path_graph(10)
G.add_nodes_from(H)

示例3:

# import required module
import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
# G.add_nodes_from([0,1,2, 3,4])
H = nx.path_graph(10)
G.add_nodes_from(H)
nx.draw(G, node_color='green')
plt.show()

        请注意,G 现在包含 H 的节点作为 G 的节点。相比之下,您可以使用图 H 作为 G 中的节点。


>>> G.add_node(H)
  

        图 G 现在包含 H 作为节点。这种灵活性非常强大,因为它允许图形的图形、文件的图形、函数的图形等等。值得考虑如何构建应用程序以使节点成为有用的实体。当然,您始终可以在 G 中使用唯一标识符,并且如果您愿意,可以使用一个单独的字典将标识符键入节点信息。

2.3 追加边(Edges)

  • G 也可以通过一次添加一条边来增长,
>>> G.add_edge(1, 2)
>>> e = (2, 3)
>>> G.add_edge(*e)  # unpack edge tuple*

通过添加边列表。

G.add_edges_from([(1, 2), (1, 3)])
示例:

# import required module
import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
# G.add_nodes_from([0,1,2, 3,4])
H = nx.path_graph(10)
G.add_nodes_from(H)
G.add_edges_from([(1, 2), (1, 3)])
nx.draw(G, node_color='green')
plt.show()

        或通过添加任何 ebunch 边。 ebunch 是边元组的任何可迭代容器。边元组可以是节点的 2 元组或具有 2 个节点的 3 元组,后跟边属性字典,例如,(2, 3, {'weight': 3.1415})。边缘属性将在下面进一步讨论


>>> G.add_edges_from(H.edges())
  

 2.4 删除节点

        人们可以用类似的方式拆除图表;使用 Graph.remove_node()、Graph.remove_nodes_from()、Graph.remove_edge() 和 Graph.remove_edges_from(),例如


G.remove_node(H)
  

        添加现有节点或边缘时没有任何抱怨。例如,删除所有节点和边后


>>> G.clear()
  

        我们添加新的节点/边,NetworkX 悄悄地忽略任何已经存在的。

>>> 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'
 

2.5 查询

        在此阶段,图 G 由 8 个节点和 2 条边组成,如下所示:


>>> G.number_of_nodes()
8
>>> G.number_of_edges()
2
  

        我们可以检查节点和边。这些方法返回节点、边、邻居等的迭代器。这通常可以提高内存效率,但这确实意味着我们需要指定将对象放入的容器类型。这里我们使用列表、集合、字典、元组和其他容器在其他情况下可能更好。


>>> list(G.nodes())
['a', 1, 2, 3, 'spam', 'm', 'p', 's']
>>> list(G.edges())
[(1, 2), (1, 3)]
>>> list(G.neighbors(1))
[2, 3]
  

        删除节点或边的语法与添加类似:


>>> G.remove_nodes_from("spam")
>>> list(G.nodes())
[1, 2, 3, 'spam']
>>> G.remove_edge(1, 3)
  

        通过实例化其中一个图形类来创建图形结构时,您可以指定多种格式的数据。

>>> H=nx.DiGraph(G)   # create a DiGraph using the connections from G
>>> list(H.edges())
[(1, 2), (2, 1)]
>>> edgelist=[(0, 1), (1, 2), (2, 3)]
>>> H=nx.Graph(edgelist)
 

三、使用图内节点和边(nodes and edges)

        您可能会注意到节点和边未指定为 NetworkX 对象。这使您可以自由地使用有意义的项目作为节点和边缘。最常见的选择是数字或字符串,但节点可以是任何可哈希对象(None 除外),并且边可以使用 G.add_edge(n1, n2, object=x) 与任何对象 x 相关联。

        例如,n1 和 n2 可能是来自 RCSB 蛋白质数据库的蛋白质对象,x 可能指的是一份 XML 出版物记录,详细描述了它们相互作用的实验观察结果。

        我们发现这种能力非常有用,但除非熟悉 Python,否则滥用它可能会导致意想不到的意外。如有疑问,请考虑使用 convert_node_labels_to_integers() 来获得更传统的带有整数标签的图。

3.1 访问边(edges)

        除了 Graph.nodes()、Graph.edges() 和 Graph.neighbors() 方法之外,还可以使用下标表示法快速直接访问图形数据结构。

        警告:不要更改返回的字典——它是图形数据结构的一部分,直接操作可能会使图形处于不一致的状态。


>>> G[1]  # Warning: do not change the resulting dict
{2: {}}
>>> G[1][2]
{}
  

        如果边已经存在,您可以使用下标符号安全地设置边的属性。


>>> G.add_edge(1, 3)
>>> G[1][3]['color'] = "blue"
  

        使用邻接迭代器可以快速检查所有边。请注意,对于无向图,这实际上会查看每条边两次。

>>> 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.adjacency():
...    for nbr, eattr in nbrs.items():
...        data = eattr['weight']
...        if data < 0.5: print('(%d, %d, %.3f)' % (n, nbr, data))
(1, 2, 0.125)
(2, 1, 0.125)
(3, 4, 0.375)
(4, 3, 0.375)

        使用 edges 方法可以方便地访问所有边。


>>> for (u, v, d) in FG.edges(data='weight'):
...     if d < 0.5: print('(%d, %d, %.3f)' % (u, v, d))
(1, 2, 0.125)
(3, 4, 0.375)
  

3.2 给图节点边 graphs, nodes, and edges加属性

        权重、标签、颜色或您喜欢的任何 Python 对象等属性都可以附加到图形、节点或边上。

        每个图、节点和边都可以在关联的属性字典中保存键/值属性对(键必须是可散列的)。默认情况下,这些是空的,但可以使用 add_edge、add_node 或直接操作名为 G.graph、G.node 和 G.edge 的属性字典来添加或更改图 G 的属性。

3.2.1 给图加属性(Graph attributes)

        创建新图时分配图属性


>>> G = nx.Graph(day="Friday")
>>> G.graph
{'day': 'Friday'}
  

        或者您可以稍后修改属性


>>> G.graph['day'] = "Monday"
>>> G.graph
{'day': 'Monday'}
  

3.2.2 节点属性(Node attributes)

        使用 add_node()、add_nodes_from() 或 G.node 添加节点属性


>>> G.add_node(1, time='5pm')
>>> G.add_nodes_from([3], time='2pm')
>>> G.node[1]
{'time': '5pm'}
>>> G.node[1]['room'] = 714
>>> list(G.nodes(data=True))
[(1, {'room': 714, 'time': '5pm'}), (3, {'time': '2pm'})]
  

        请注意,将节点添加到 G.node 不会将其添加到图中,请使用 G.add_node() 添加新节点。

3.2.3 节点属性Edge Attributes

        使用 add_edge()、add_edges_from()、下标符号或 G.edge 添加边缘属性。


>>> 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.edge[1][2]['weight'] = 4
  

        特殊属性 weight 应该是数字,并保存需要加权边的算法使用的值。

        警告: 不要为 G.edge[u] 或 G.edge[u][v] 分配任何东西,因为它会破坏图形数据结构。如上所示更改边缘字典。

四、多种有向图

4.1 有向图Directed graphs

        无向图和有向图唯一区别是:在生成图的时候可以选择Graph和DiGraph。

        DiGraph 类提供了特定于有向边的其他方法,例如,

  • DiGraph.out_edges() 
  • DiGraph.in_degree() 
  • DiGraph.predecessors() 
  • DiGraph.successors()  

        为了让算法轻松地与这两个类一起工作,有向neighbors() 和 degree() 的版本分别等同于 successors() 以及 in_degree() 和 out_degree() 的总和,尽管有时感觉不一致。


>>> DG = nx.DiGraph()
>>> DG.add_weighted_edges_from([(1, 2, 0.5), (3, 1, 0.75)])
>>> DG.out_degree(1, weight='weight')
0.5
>>> DG.degree(1, weight='weight')
1.25
>>> DG.successors(1)
[2]
>>> DG.neighbors(1)
[2]
  

        一些算法仅适用于有向图,而其他算法则没有为有向图很好地定义。事实上,将有向图和无向图混为一谈的趋势是危险的。如果您想将有向图视为无向图以进行某些测量,您应该使用 Graph.to_undirected() 或


H = nx.Graph(G)    # convert G to undirected graph
  

4.2 多向图(Multigraphs)

        允许有向图有双向边,就是多向图。

        NetworkX 为图提供类,允许任意一对节点之间存在多条边。 MultiGraph 和 MultiDiGraph 类允许您添加相同的边两次,可能使用不同的边数据。这对于某些应用程序来说可能很强大,但许多算法在此类图形上的定义并不明确。在结果定义明确的情况下,例如 MultiGraph.degree() 我们提供该函数。否则,您应该以明确定义测量的方式转换为标准图形。

>>> MG = nx.MultiGraph()
>>> MG.add_weighted_edges_from([(1, 2, 0.5), (1, 2, 0.75), (2, 3, 0.5)])
>>> dict(MG.degree(weight='weight'))
{1: 1.25, 2: 1.75, 3: 0.5}
>>> GG = nx.Graph()
>>> for n, nbrs in MG.adjacency_iter():
...    for nbr, edict in nbrs.items():
...        minvalue = min([d['weight'] for d in edict.values()])
...        GG.add_edge(n, nbr, weight = minvalue)
...
>>> nx.shortest_path(GG, 1, 3)
[1, 2, 3]



五、图生成和图操作(generators and graph operations)

        除了逐个节点或逐条边构建图外,它们还可以通过以下方式生成

  1. 应用经典的图形操作,例如:

    
    subgraph(G, nbunch)      - induce subgraph of G on nodes in nbunch
    union(G1,G2)             - graph union
    disjoint_union(G1,G2)    - graph union assuming all nodes are different
    cartesian_product(G1,G2) - return Cartesian product graph
    compose(G1,G2)           - combine graphs identifying nodes common to both
    complement(G)            - graph complement
    create_empty_copy(G)     - return an empty copy of the same graph class
    convert_to_undirected(G) - return an undirected representation of G
    convert_to_directed(G)   - return a directed representation of G
      
  2. 使用对经典小图之一的调用,例如,


>>> peterseni = nx.petersen_graph()
>>> tutte = nx.tutte_graph()
>>> maze = nx.sedgewick_maze_graph()
>>> tet = nx.tetrahedral_graph()
  

        3. 对经典图使用(建设性的)生成器,例如.,


>>> K_5 = nx.complete_graph(5)
>>> K_3_5 = nx.complete_bipartite_graph(3, 5)
>>> barbell = nx.barbell_graph(10, 10)
>>> lollipop = nx.lollipop_graph(10, 20)
  

        4. 使用随机图形生成器,例如,


>>> er = nx.erdos_renyi_graph(100, 0.15)
>>> ws = nx.watts_strogatz_graph(30, 3, 0.1)
>>> ba = nx.barabasi_albert_graph(100, 5)
>>> red = nx.random_lobster(100, 0.9, 0.9)
  

        5. 使用常见的图形格式读取存储在文件中的图形,例如边列表、邻接列表、GML、GraphML、pickle、LEDA 等。

>>> nx.write_gml(red, "path.to.file")
>>> mygraph = nx.read_gml("path.to.file")


        参考1: Reading and writing graphs

        参考2: Graph generators

六、图论函数分析Analyzing graphs


G 的结构可以使用各种图论函数进行分析,例如:  

>> G = nx.Graph()
>>> G.add_edges_from([(1, 2), (1, 3)])
>>> G.add_node("spam")       # adds node "spam"
>>> list(nx.connected_components(G))
[{1, 2, 3}, {'spam'}]
>>> sorted(d for n, d in G.degree())
[0, 1, 1, 2]
>>> nx.clustering(G)
{1: 0.0, 2: 0.0, 3: 0.0, 'spam': 0.0}
  

        返回节点属性的函数返回节点上的迭代器,值 2 元组。如果您愿意,这些可以很容易地存储在字典结构中。


>>> dict(nx.degree(G))
{1: 2, 2: 1, 3: 1, 'spam': 0}
  

        对于特定节点的值,您可以提供单个节点或 nbunch 节点作为参数。如果指定单个节点,则返回单个值。如果指定了 nbunch,则该函数将返回一个字典。


>>> nx.degree(G, 1)
2
>>> G.degree(1)
2
>>> dict(G.degree([1, 2]))
{1: 2, 2: 1}
>>> sorted(d for n, d in G.degree([1, 2]))
[1, 2]
>>> sorted(d for n, d in G.degree())
[0, 1, 1, 2]s  

算法 Algorithms  

资料: Algorithms

七 画图函数Drawing graphs

        NetworkX 主要不是图形绘制包,而是包括使用 Matplotlib 的基本绘图以及使用开源 Graphviz 软件包的界面。这些是 networkx.drawing 模块的一部分,如果可能将被导入。有关详细信息,请参阅绘图。

        首先导入Matplotlib的plot接口(pylab也行)


>>> import matplotlib.pyplot as plt
  

        您可能会发现使用“ipython -pylab”交互式测试代码很有用,它结合了 ipython 和 matplotlib 的强大功能,并提供了一种方便的交互模式。

        要测试 networkx.drawing 的导入是否成功,请使用以下方法之一绘制 G  

>>> nx.draw(G)
>>> nx.draw_random(G)
>>> nx.draw_circular(G)
>>> nx.draw_spectral(G)
  

绘制到交互式显示器时。请注意,您可能需要发布一个 Matplotlib


>>> plt.show()
  

        如果您不在交互模式下使用 matplotlib,则命令:(请参阅 Matplotlib 常见问题解答)

        要将图纸保存到文件,请使用,例如


>>> nx.draw(G)
>>> plt.savefig("path.png")
  

        写入本地目录中的文件“path.png”。如果 Graphviz 和 PyGraphviz 或 pydot 在您的系统上可用,您还可以使用 nx_agraph.graphviz_layout(G) 或 nx_pydot.graphviz_layout(G) 来获取节点位置,或以点格式编写图形以进行进一步处理。


>>> pos = nx.nx_agraph.graphviz_layout(G)
>>> nx.draw(G, pos=pos)
>>> nx.write_dot(G,'file.dot')
参考graphs: Drawing  
import networkx
import matplotlib.pyplot as plt

# create object
G = networkx.lollipop_graph(5, 3)

# illustrate graph
networkx.draw(G, node_color='green')
plt.show()

 结果:

  •  lollipop_graph是棒糖图的函数
  • G = networkx.lollipop_graph(5, 3) 该语句生成一个图,
  • 全连接的是5个节点,3个节点是单联图。节点总数是8.
  • 显示的时候节点位置是随机的。

Graph | NetworkX 入门教程 - 知乎 (zhihu.com)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【python视图1】networkx操作Graph图 的相关文章

  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 使用什么算法来确定使系统达到“零”状态所需的最小操作数?

    这是一种更通用的问题 不是特定于语言的 有关要使用的想法和算法的更多信息 系统如下 它登记朋友群体之间的小额贷款 Alice and Bill要去吃午饭 比尔的卡坏了 所以爱丽丝支付了他的餐费 10 美元 第二天Bill and Charl
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • 如何生成类似github的影响图?

    是否有一些程序 或者我错过的一些神奇的 git 插件 可以从 git 存储库获取影响图或类似的东西 而无需通过 github 就数据收集而言 我可以生成图表 我不确定从哪里开始编写自己的代码 我假设有一些标志我可以传递给 git log 来
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • 用于交互式图形绘制的轻量级 JavaScript 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有兴趣了解用于绘制交互式图表的最轻量级 javascript 库 我掌握的数据主要是与海洋研究相关的科学数据 我知道一些 jquery
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P

随机推荐

  • 11_UART串口

    11 UART 文章目录 11 UART1 串口连接芯片图2 串口传输一个字节的过程3 发送接收过程4 编写UART函数4 1 初始化函数uart0 init 4 1 1 设置引脚用于串口4 1 2 使能上拉4 1 3 设置波特率4 1 4
  • 汇编指令:LDMIA、LDMIB、LDMDB、LDMDA、STMIA、LDMFD、LDMFA、LDMED、LDMEA

    ARM指令中多数据传输共有两种 xff1a LDM load much xff1a 多数据加载 将地址上的值加载到寄存器上 STM store much xff1a 多数据存储 将寄存器的值存到地址上 主要用途 xff1a 现场保护 数据复
  • C++ 实现 发送HTTP Get/Post请求

    1 简述 最近简单看了一下关于HTTP请求方面的知识 xff0c 之前一直用Qt来实现 xff0c 有专门HTTP请求的QNetworkAccessManager类来处理 xff0c 实现也比较简单 xff0c 这里主要讲解一下用C 43
  • [Simple] 洗牌算法

    题目要求 xff1a 平时洗牌是两打牌 xff0c 交叉洗在一起 也就是开始 1 2 3 4 5 6 7 8 第一次 1 5 2 6 3 7 4 8 第二次 1 3 5 7 2 4 6 8 第k次 给你一个数组a 2N xff0c 要求在O
  • 【PID控制原理及其算法】

    前言 本文以自己的学习过程总结而来 xff0c 将自己的经验写出来以供大家一起学习 xff0c 如有错误请多指教 一 PID是什么 xff1f PID就是比例 积分 微分 xff0c PID算法可以说是在自动控制原理中比较经典的一套算法 x
  • printf重定向的相关总结

    简介 实现printf重定向有多种方式 xff0c 下面一一介绍 linux环境下 虽然linux系统的默认标准输出设备是显示器 xff0c 但是我们可以把printf打印输出的内容重定向到其他设备或文件 方法如下 xff1a 方法1 xf
  • 开发者七问七答:什么是产品化?

    简介 xff1a 之前参加了企业智能部门如何做产品化的讨论 xff0c 大家对产品化的定义和过程都有各自不同的见解 我觉得这个话题其实可以扩展下 xff0c 想站在一个开发人员的视角尝试探讨一下产品化 下面以自问自答的方式来展开 1 当我们
  • 系统调用和库函数及API的区别

    在写程序的过程中 xff0c 像MFC xff0c VC 43 43 这些编程 xff0c 都会涉及到函数的调用 xff0c 有库函数也有系统函数 xff0c 下面看一看它们的区别 xff01 xff01 系统调用 xff08 system
  • 应用服务器与zk之间的连接超时

    关于connectString服务器地址配置 格式 192 168 1 1 2181 192 168 1 2 2181 192 168 1 3 2181 这个地址配置有多个ip port之间逗号分隔 底层操作 span class hljs
  • 日本小学生走向APP开发私塾 智能手机迫切改变IT教育——日本经济新闻报道

    如要在日本接受专门的信息技术教育 xff08 IT xff09 xff0c 只有结束义务教育课程才能接受 如今 xff0c 打破这些障碍的趋势逐渐浓厚 因为从小就接触到各种数字机器和互联网而长大的 数字土著 xff08 digital na
  • 步进电机和伺服电机的区别

    步进电机作为一种开环控制的系统 xff0c 和现代数字控制技术有着本质的联系 在目前国内的数字控制系统中 xff0c 步进电机的应用十分广泛 随着全数字式交流伺服系统的出现 xff0c 交流伺服电机也越来越多地应用于数字控制系统中 为了适应
  • 【图像处理】墨西哥小波和带通滤波

    一 说明 在连续小波的家族当中 xff0c 埃尔米特小波是个非常特别的存在 xff08 应用在连续小波转换称作埃尔米特转换 xff09 Ricker子波计算电动力学的广谱源项 它通常只在美国才会被称作墨西哥帽小波 xff0c 因为在作为核函
  • 【halcon知识】应用仿射变换

    一 说明 无论什么样的变换 xff0c 都离不开齐次变换矩阵 一般地 xff0c 先准备一个空的齐次变换矩阵 xff0c 这个矩阵随便填写 xff1a 1 xff09 填入旋转类参数就是旋转矩阵 xff0c 2 填入仿射参数就可进行仿射变换
  • 【ROS2知识】SQLite数据库

    目录 一 说明 二 介绍SQLite 三 安装 3 1 简单测试 生成一个表 3 2 sqlite 共五种数据类型
  • open3D

    目录 一 说明 二 如何安装open3d xff1f 三 显示点云数据 3 1 显示点云场景数据 3 2 体素下采样 3 3 顶点法线估计 一 说明 对于点云 处理 xff0c 这里介绍哦pen3d xff0c 该软件和opencv同样是i
  • 【计算几何7】帝国边界划分问题【Voronoi图的原理】

    目录 一 说明 二 帝国边界划分问题 三 voronoi的正规定义 3 1 最简单的voronoi情况 3 2 在距离空间的数学描述 3 3 不同距离空间所得 Voronoi 单元不同 四 代码和库 4 1 算法库 4 2 参数说明 4 3
  • 【python视图2】基于networkx的10个绘图技巧

    目录 一 说明 二 简单图操作种种 2 1 简单的无向图 2 2 简单的有向图 2 3 二维网格grid图 和边数据读写 2 4 环图 2 5 全连接神经网络 2 6 分布直方图 度秩图 连同子图 2 7 随机生成 2 8 渐变颜色化 2
  • ESP32控制TDC-GP22测量超声传播时间(超声流量计)

    TDC GP22控制的资料 xff0c 网上的资源都是基于STM32或者MSP430主控的 xff0c 但现在这两款芯片都太贵了 xff0c 因此就想用便宜点的ESP32 xff0c 折腾了快一周 xff0c 终于弄好了 工程源码和参考资料
  • 【python视图3】networkx图操作示例

    目录 一 说明 二 神奇制图 2 1 绘制彩虹图 2 2 随机地理图 2 3 旅行商问题 2 4 权重的灵活绘制 2 5 barabasi albert模型1 2 6 barabasi albert模型2 2 7 igraph操作 一 说明
  • 【python视图1】networkx操作Graph图

    目录 一 说明 二 生成图 xff08 Creating a graph xff09 2 1 创建一个没有节点和边的空图 2 2 在空图追加节点 2 3 追加边 xff08 Edges xff09 2 4 删除节点 2 5 查询 三 使用图