我是python新手,来自matlab。我有一个以 matlab v7.3 (HDF5) 格式保存的大型稀疏矩阵。到目前为止,我已经找到了两种加载文件的方法,使用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 的评论,我应该补充一点,我已经尝试通过以下两种方式将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))
但是这两个操作也都非常慢。
我在这里缺少什么吗?