123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- from __future__ import division, print_function, absolute_import
- import numpy as np
- from numpy.testing import assert_array_almost_equal
- from scipy.sparse import csr_matrix
- from scipy.sparse.csgraph import csgraph_from_dense, csgraph_to_dense
- def test_csgraph_from_dense():
- np.random.seed(1234)
- G = np.random.random((10, 10))
- some_nulls = (G < 0.4)
- all_nulls = (G < 0.8)
- for null_value in [0, np.nan, np.inf]:
- G[all_nulls] = null_value
- olderr = np.seterr(invalid="ignore")
- try:
- G_csr = csgraph_from_dense(G, null_value=0)
- finally:
- np.seterr(**olderr)
- G[all_nulls] = 0
- assert_array_almost_equal(G, G_csr.toarray())
- for null_value in [np.nan, np.inf]:
- G[all_nulls] = 0
- G[some_nulls] = null_value
- olderr = np.seterr(invalid="ignore")
- try:
- G_csr = csgraph_from_dense(G, null_value=0)
- finally:
- np.seterr(**olderr)
- G[all_nulls] = 0
- assert_array_almost_equal(G, G_csr.toarray())
- def test_csgraph_to_dense():
- np.random.seed(1234)
- G = np.random.random((10, 10))
- nulls = (G < 0.8)
- G[nulls] = np.inf
- G_csr = csgraph_from_dense(G)
- for null_value in [0, 10, -np.inf, np.inf]:
- G[nulls] = null_value
- assert_array_almost_equal(G, csgraph_to_dense(G_csr, null_value))
- def test_multiple_edges():
- # create a random sqare matrix with an even number of elements
- np.random.seed(1234)
- X = np.random.random((10, 10))
- Xcsr = csr_matrix(X)
- # now double-up every other column
- Xcsr.indices[::2] = Xcsr.indices[1::2]
- # normal sparse toarray() will sum the duplicated edges
- Xdense = Xcsr.toarray()
- assert_array_almost_equal(Xdense[:, 1::2],
- X[:, ::2] + X[:, 1::2])
- # csgraph_to_dense chooses the minimum of each duplicated edge
- Xdense = csgraph_to_dense(Xcsr)
- assert_array_almost_equal(Xdense[:, 1::2],
- np.minimum(X[:, ::2], X[:, 1::2]))
|