当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。