當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python SciPy csgraph.csgraph_to_dense用法及代碼示例


本文簡要介紹 python 語言中 scipy.sparse.csgraph.csgraph_to_dense 的用法。

用法:

scipy.sparse.csgraph.csgraph_to_dense(csgraph, null_value=0)#

將稀疏圖表示轉換為密集表示

參數

csgraph csr_matrix、csc_matrix 或 lil_matrix

圖的稀疏表示。

null_value 浮點數,可選

用於指示密集表示中的空邊的值。默認值為 0。

返回

graph ndarray

稀疏圖的密集表示。

注意

對於正常的稀疏圖表示,使用 null_value=0 調用 csgraph_to_dense 會產生與在主稀疏包中使用密集格式轉換相同的結果。然而,當稀疏表示具有重複值時,結果會有所不同。 scipy.sparse 中的工具將添加重複值以獲得最終值。該函數將選擇重複值中的最小值以獲得最終值。例如,在這裏我們將創建一個 two-node 有向稀疏圖,具有從節點 0 到節點 1 的多條邊,權重分別為 2 和 3。這說明了行為上的差異:

>>> from scipy.sparse import csr_matrix, csgraph
>>> import numpy as np
>>> data = np.array([2, 3])
>>> indices = np.array([1, 1])
>>> indptr = np.array([0, 2, 2])
>>> M = csr_matrix((data, indices, indptr), shape=(2, 2))
>>> M.toarray()
array([[0, 5],
       [0, 0]])
>>> csgraph.csgraph_to_dense(M)
array([[0., 2.],
       [0., 0.]])

造成這種差異的原因是允許壓縮稀疏圖表示任意兩個節點之間的多條邊。由於大多數稀疏圖算法都關注任意兩個節點之間的單個 lowest-cost 邊,因此求和多個權重的默認 scipy.sparse 行為在這種情況下沒有意義。

使用此例程的另一個原因是允許帶有zero-weight 邊的圖。讓我們看一個 two-node 有向圖的示例,由一條權重為零的邊連接:

>>> from scipy.sparse import csr_matrix, csgraph
>>> data = np.array([0.0])
>>> indices = np.array([1])
>>> indptr = np.array([0, 1, 1])
>>> M = csr_matrix((data, indices, indptr), shape=(2, 2))
>>> M.toarray()
array([[0, 0],
       [0, 0]])
>>> csgraph.csgraph_to_dense(M, np.inf)
array([[inf,  0.],
       [inf, inf]])

在第一種情況下,zero-weight 邊在密集表示中丟失。第二種情況,我們可以選擇不同的空值,看看圖的真實形式。

例子

>>> from scipy.sparse import csr_matrix
>>> from scipy.sparse.csgraph import csgraph_to_dense
>>> graph = csr_matrix( [
... [0, 1, 2, 0],
... [0, 0, 0, 1],
... [0, 0, 0, 3],
... [0, 0, 0, 0]
... ])
>>> graph
<4x4 sparse matrix of type '<class 'numpy.int64'>'
    with 4 stored elements in Compressed Sparse Row format>
>>> csgraph_to_dense(graph)
array([[0., 1., 2., 0.],
       [0., 0., 0., 1.],
       [0., 0., 0., 3.],
       [0., 0., 0., 0.]])

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.sparse.csgraph.csgraph_to_dense。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。