【发布时间】:2016-02-12 07:21:55
【问题描述】:
我使用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)并且调用.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 倍。
【问题讨论】: