SciPy 图表

创建于 2024-12-03 / 23
字体: [默认] [大] [更大]

使用图表

图表是一种基本的数据结构。

SciPy 为我们提供了模块 scipy.sparse.csgraph 用于处理此类数据结构。


邻接矩阵

邻接矩阵是一个 nxn 矩阵,其中 n 是图中元素的数量。 p>

而数值代表元素之间的联系。

例子:

对于这样的图,具有元素 A、B 和 C,连接是:

A& B与权重1有关。

A& C与权重2有关。

C& B 未连接。

邻接矩阵如下所示:

      A B C
   A:[0 1 2]  
   B:[1 0 0]
   C:[2 0 0]

以下是处理邻接矩阵的一些最常用的方法。


连接组件

使用 connected_components() 方法查找所有连接的组件。

实例

import numpy as np
from scipy.sparse.csgraph import connected_components
from scipy.sparse import csr_matrix

arr = np.array([
  [0, 1, 2],
  [1, 0, 0],
  [2, 0, 0]
])

newarr = csr_matrix(arr)

print(connected_components(newarr)) 亲自试一试 »

Dijkstra

使用 dijkstra 方法在图中找到从一个元素到另一个元素的最短路径。

它需要以下参数:

  1. return_predecessors: 布尔值(True 返回整个遍历路径,否则为 False)。
  2. 索引:元素的索引,仅返回来自该元素的所有路径。
  3. limit:路径的最大权重。

实例

找到从元素 1 到 2 的最短路径:

import numpy as np
from scipy.sparse.csgraph import dijkstra
from scipy.sparse import csr_matrix

arr = np.array([
  [0, 1, 2],
  [1, 0, 0],
  [2, 0, 0]
])

newarr = csr_matrix(arr)

print(dijkstra(newarr, return_predecessors=True, indices=0)) 亲自试一试 »

Floyd Warshall

使用 floyd_warshall() 方法查找所有元素对之间的最短路径。

实例

找出所有元素对之间的最短路径:

import numpy as np
from scipy.sparse.csgraph import floyd_warshall
from scipy.sparse import csr_matrix

arr = np.array([
  [0, 1, 2],
  [1, 0, 0],
  [2, 0, 0]
])

newarr = csr_matrix(arr)

print(floyd_warshall(newarr, return_predecessors=True)) 亲自试一试 »

Bellman Ford

bellman_ford() 方法也可以找到所有元素对之间的最短路径,但该方法也可以处理负权重。

实例

用给定的负权图找到从元素 1 到 2 的最短路径:

import numpy as np
from scipy.sparse.csgraph import bellman_ford
from scipy.sparse import csr_matrix

arr = np.array([
  [0, -1, 2],
  [1, 0, 0],
  [2, 0, 0]
])

newarr = csr_matrix(arr)

print(bellman_ford(newarr, return_predecessors=True, indices=0)) 亲自试一试 »

Depth First Order

depth_first_order() 方法从节点返回深度优先遍历。

此函数接受以下参数:

  1. 图表。
  2. 要从中遍历图形的起始元素。

实例

给定邻接矩阵先遍历图深度:

import numpy as np
from scipy.sparse.csgraph import depth_first_order
from scipy.sparse import csr_matrix

arr = np.array([
  [0, 1, 0, 1],
  [1, 1, 1, 1],
  [2, 1, 1, 0],
  [0, 1, 0, 1]
])

newarr = csr_matrix(arr)

print(depth_first_order(newarr, 1)) 亲自试一试 »

广度优先顺序

breadth_first_order() 方法从节点返回广度优先遍历。

此函数接受以下参数:

  1. 图表。
  2. 要从中遍历图形的起始元素。

实例

对给定的邻接矩阵先遍历图宽度:

import numpy as np
from scipy.sparse.csgraph import breadth_first_order
from scipy.sparse import csr_matrix

arr = np.array([
  [0, 1, 0, 1],
  [1, 1, 1, 1],
  [2, 1, 1, 0],
  [0, 1, 0, 1]
])

newarr = csr_matrix(arr)

print(breadth_first_order(newarr, 1)) 亲自试一试 »

0 人点赞过