首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加载用np.save保存的稀疏矩阵

加载用np.save保存的稀疏矩阵
EN

Stack Overflow用户
提问于 2016-02-12 07:21:55
回答 1查看 1.5K关注 0票数 1

我用np.save('X', X)保存了一个枕形的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种保存/加载矩阵的选项,所以我进行了速度比较,看看哪种方法对稀疏矩阵最有效:

编写稀疏矩阵:

代码语言:javascript
复制
%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

读取稀疏矩阵:

代码语言:javascript
复制
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/loadmatsave/load快3-10倍。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-12 08:23:56

让我们注意印刷品中的所有线索

代码语言:javascript
复制
array(<240760x110493 sparse matrix of type '<class 'numpy.float64'>'
     with 20618831 stored elements in Compressed Sparse Row format>, dtype=object)

最外层:

代码语言:javascript
复制
array(....,dtype=object)

稀疏矩阵不是常规数组;对np.save来说,它只是一个Python对象。因此,它将它封装在一个dtype=object中并保存了它。它是一个0d数组(因此是()形状),所以所有的索引尝试都失败了。试一试

代码语言:javascript
复制
M=arr.item() # or
M=arr[()]

现在,M应该显示为:

代码语言:javascript
复制
sparse matrix of type '<class 'numpy.float64'>'
     with 20618831 stored elements in Compressed Sparse Row format

具有像M.shape这样的属性。M.A将显示密集的表单,因为它太大了,无法有效地实现这一点。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35356933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档