Объекты scipy.sparse.lil_matrix, похоже, не хранят явно установленные значения 0. Другие разреженные матрицы, такие как csr_matrix, делают.
Рассмотрим следующий пример:
In [1]: from scipy.sparse import lil_matrix
In [2]: import numpy as np
In [3]: x = lil_matrix((5, 5), dtype=np.float32)
In [4]: x[3, 3] = 0
In [5]: x
Out[5]:
<5x5 sparse matrix of type '<class 'numpy.float32'>'
with 0 stored elements in LInked List format>
Это плохо, потому что иногда между элементами графа будет расстояние 0 (например, дубликаты точки данных). Если я передам lil_matrix, например, scipy.sparse.csgraph.connected_components, он обнаружит неправильное количество подключенных компонентов, поскольку явный 0 преобразуется обратно в «разреженность» и поэтому рассматривается как бесконечное расстояние.
Я не могу использовать csr_matrix, потому что очень неэффективно присваивать ему элементы. Тем не менее, он будет хранить явно установленные значения 0 в отличие от lil_matrix. Замените lil_matrix на csr_matrix в приведенном выше коде, и результат изменится на:
<5x5 sparse matrix of type '<class 'numpy.float32'>'
with 1 stored elements in Compressed Sparse Row format>
Кто-нибудь знает, как хранить явные значения 0 в объектах lil_matrix?
Спасибо.