Как мне в python получить разреженную матрицу, хранящуюся julia в файле .jld?

Используя julia, я могу сохранить разреженную матрицу в файле .jld (который использует формат HDF5) следующим образом:

a=spzeros(3,3);
a[1,1]=2.0
a[2,1]=1.0
a[3,1]=5
@save("sparsematrix.jld",a)

Теперь я хочу получить эту матрицу в python (используя h5py), поэтому я попробовал следующее:

import h5py 
filename="sparsematrix.jld"
f = h5py.File(filename, 'r')
data= f["a"][()]
f.close()

Печать data вернет (3, 3, <HDF5 object reference>, <HDF5 object reference>, <HDF5 object reference>), поэтому я попытался получить доступ к ссылкам на объекты с помощью: f[data[2]], который возвращает <HDF5 dataset "00000001": shape (4,), type "<i8">, но теперь я застрял.

Итак, как мне получить разреженную матрицу из файла .jld?


person Asmus    schedule 19.11.2015    source источник


Ответы (1)


Хорошо, нашел сам, поразмыслив над форматом CSC:

import h5py 
from scipy.sparse import csc_matrix

filename="sparsematrix.jld"
f = h5py.File(filename, 'r')
data= f["a"][()]

column_ptr=f[data[2]][:]-1 ## correct indexing from julia (starts at 1)
indices=f[data[3]][:]-1 ## correct indexing
values =f[data[4]][:]
csc_matrix((values,indices,column_ptr), shape=(data[0],data[1])).toarray()

f.close()
person Asmus    schedule 20.11.2015
comment
Похоже, Джулия следует практике Matlab. Scipy имеет более разреженные форматы. - person hpaulj; 30.11.2015