簡體   English   中英

加載用np.save保存的稀疏矩陣

[英]loading a sparse matrix saved with np.save

我使用np.save('X', X)保存了一個scipy csr矩陣。 當我用np.load('X.npy')加載它時,我得到了這個簽名:

array(<240760x110493 sparse matrix of type '<class 'numpy.float64'>' with 20618831 stored elements in Compressed Sparse Row format>, dtype=object)

但是,我無法使用索引(例如X[0,0]X[:10,:10] or X[0]都給出錯誤IndexError: too many indices for array )訪問該數據X[:10,:10] or X[0]並調用.shape返回()

有沒有一種方法可以訪問此數據,或者現在它已損壞?

編輯。

由於有3種保存/加載矩陣的選項,因此我進行了速度比較,以了解哪種方法最適合我的稀疏矩陣:

編寫稀疏矩陣:

%timeit -n1 scipy.io.savemat('tt', {'t': X})
1 loops, best of 3: 66.3 ms per loop

timeit -n1 scipy.io.mmwrite('tt_mm', X)
1 loops, best of 3: 7.55 s per loop

timeit -n1 np.save('tt_np', X)
1 loops, best of 3: 188 ms per loop

讀取稀疏矩陣:

timeit -n1 scipy.io.loadmat('tt')
1 loops, best of 3: 9.78 ms per loop

%timeit -n1 scipy.io.mmread('tt_mm')
1 loops, best of 3: 5.72 s per loop

%timeit -n1 np.load('tt_np.npy')
1 loops, best of 3: 150 ms per loop

結果是mmread/mmwrite極低(慢100倍),而savemat/loadmat速度是save/load 3-10倍。

讓我們注意印刷中的所有線索

array(<240760x110493 sparse matrix of type '<class 'numpy.float64'>'
     with 20618831 stored elements in Compressed Sparse Row format>, dtype=object)

最外層:

array(....,dtype=object)

稀疏矩陣不是規則數組。 np.save ,它只是一個Python對象。 因此,將其包裝在dtype=object並將其保存。 它是一個0d數組(因此為()形狀),因此所有索引嘗試均失敗。 試試吧

M=arr.item() # or
M=arr[()]

現在, M應該顯示為:

sparse matrix of type '<class 'numpy.float64'>'
     with 20618831 stored elements in Compressed Sparse Row format

具有M.shape屬性。 MA會顯示密集的表格,因為它太大而無法執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM