我是新來的python,來自matlab。我有一個保存在matlab v7.3(HDF5)格式的大型稀疏矩陣。到目前爲止,我已經在文件中找到了兩種加載方式,分別使用h5py
和tables
。然而,在矩陣運行後,似乎也非常緩慢。例如,在MATLAB:加載matlab稀疏矩陣保存與-v7.3(HDF5)到Python並在其上運行
>> 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))
但這兩種操作也非常緩慢。
有什麼我在這裏失蹤?
在Matlab中加載文件幾乎是瞬時的(<1秒),所以我認爲比較是公平的,但我關於內置求和函數的看法。我認爲越來越多的人會做我正在做的事情(從Matlab轉向Python),所以如果在Matlab文件中加載一點點支持,恕我直言......恕我直言...... – tdc
嗯,我不能在沒有你的文件的情況下測試它,但實際上在python中加載數組的速度也應該很快。你目前所做的並不是實際加載它。它會使有效的內存映射數組重新恢復。任何語言都獨立訪問它會很慢,因爲它主要是磁盤搜索。上面的示例代碼仍然很慢?另外,看看'scipy.io.loadmat' http://docs.scipy.org/doc/scipy/reference/generated/scipy.io.loadmat.html#scipy.io.loadmat,雖然我不是確定它是否支持稀疏數組。 –
沒有機會嘗試它,但感謝輸入 – tdc