私はmatlabから来て、pythonが初めてです。matlab v7.3 (HDF5) 形式で保存された大きな疎行列があります。これまでに、ファイルをロードする 2 つの方法を見つけましh5py
たtables
。ただし、マトリックスでの操作はいずれにしても非常に遅いようです。たとえば、matlab では次のようになります。
>> whos
Name Size Bytes Class Attributes
M 11337x133338 77124408 double sparse
>> tic, sum(M(:)); toc
Elapsed time is 0.086233 seconds.
テーブルの使用:
t = time.time()
sum(f.root.M.data)
elapsed = time.time() - t
print elapsed
35.929461956
h5py の使用:
t = time.time()
sum(f["M"]["data"])
elapsed = time.time() - t
print elapsed
(待つの諦めた…)
[編集]
@bpgergo からのコメントに基づいて、次の 2 つの方法でh5py
( f
)によってロードされた結果をnumpy
配列またはscipy
スパース配列に変換しようとしたことを追加する必要があります。
from scipy import sparse
A = sparse.csc_matrix((f["M"]["data"], f["M"]["ir"], f["tfidf"]["jc"]))
また
data = numpy.asarray(f["M"]["data"])
ir = numpy.asarray(f["M"]["ir"])
jc = numpy.asarray(f["M"]["jc"])
A = sparse.coo_matrix(data, (ir, jc))
ただし、これらの操作は両方とも非常に遅くなります。
私がここに欠けているものはありますか?