Menu
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

SciPy 图表


使用图表

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

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


邻接矩阵

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

值表示元素之间的连接。

示例

对于像这样的图表,元素 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. **indices:** 要返回所有路径的元素的索引。
  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() 方法返回从节点开始的深度优先遍历。

此函数采用以下参数

  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))
自己试试 »


×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.