Внутренне я считаю, что MATLAB использует формат csc
. Но конструкция (по крайней мере, когда я использовал ее много лет назад) со входами в стиле coo
- данные, строки, столбцы.
Я бы предложил создать разреженную матрицу в MATLAB и сохранить ее (в режиме до HDF5) в формате .mat. Затем загрузите это с scipy.io.loadmat
. Затем используйте этот результат в качестве руководства при записи матрицы scipy.sparse
обратно в .mat
.
scipy.sparse
имеет функцию save
, но использует np.savez
для записи соответствующих массивов атрибутов. Если у вас был код MATLAB, который мог обрабатывать файлы .npy
, вы, вероятно, могли бы загрузить такое сохранение (снова используя формат coo
).
===
Тест.
Создание и сохранение разреженной матрицы:
In [263]: from scipy import io, sparse
In [264]: M = sparse.random(10,10,.2,'coo')
In [265]: io.savemat('sparse.mat', {'M':M})
тестовая нагрузка на стороне Python:
In [268]: io.loadmat('sparse.mat')
Out[268]:
{'__header__': b'MATLAB 5.0 MAT-file Platform: posix, Created on: Wed Jul 3 11:41:23 2019',
'__version__': '1.0',
'__globals__': [],
'M': <10x10 sparse matrix of type '<class 'numpy.float64'>'
with 20 stored elements in Compressed Sparse Column format>}
Таким образом, savemat преобразовал формат coo
в csc
перед сохранением.
В октавном сеансе:
>> load sparse.mat
>> M
M =
Compressed Column Sparse (rows = 10, cols = 10, nnz = 20 [20%])
(4, 1) -> 0.41855
(6, 1) -> 0.33456
(7, 1) -> 0.47791
(4, 3) -> 0.27464
(2, 4) -> 0.96700
(3, 4) -> 0.60283
(10, 4) -> 0.41400
(1, 5) -> 0.57004
(2, 5) -> 0.44211
(1, 6) -> 0.63884
(3, 7) -> 0.012127
(8, 7) -> 0.77328
(8, 8) -> 0.25287
(10, 8) -> 0.46280
(1, 9) -> 0.0022617
(6, 9) -> 0.70874
(1, 10) -> 0.79101
(3, 10) -> 0.81999
(6, 10) -> 0.12515
(9, 10) -> 0.60660
Похоже, код savemat/loadmat
обрабатывает разреженные матрицы совместимым с MATLAB способом.