3 回答
TA贡献1831条经验 获得超10个赞
SciPy 1.19现在具有scipy.sparse.save_npz和scipy.sparse.load_npz。
from scipy import sparse
sparse.save_npz("yourmatrix.npz", your_matrix)
your_matrix_back = sparse.load_npz("yourmatrix.npz")
对于这两个函数,file参数也可以是类似文件的对象(即的结果open),而不是文件名。
从Scipy用户组得到了答案:
一个csr_matrix有3个数据属性此事:.data,.indices,和.indptr。都是简单的ndarray,因此numpy.save可以在它们上使用。用numpy.save或保存三个数组,用numpy.savez加载它们numpy.load,然后用以下方法重新创建稀疏矩阵对象:
new_csr = csr_matrix((data, indices, indptr), shape=(M, N))
因此,例如:
def save_sparse_csr(filename, array):
np.savez(filename, data=array.data, indices=array.indices,
indptr=array.indptr, shape=array.shape)
def load_sparse_csr(filename):
loader = np.load(filename)
return csr_matrix((loader['data'], loader['indices'], loader['indptr']),
shape=loader['shape'])
TA贡献1865条经验 获得超7个赞
虽然你写的,scipy.io.mmwrite并且scipy.io.mmread不适合你的工作,我只想补充它们的工作原理。这个问题是没有。1 Google命中,所以我本人开始np.savez并开始使用pickle.dump简单明显的scipy函数。它们为我工作,不应该由尚未尝试过它们的人监督。
from scipy import sparse, io
m = sparse.csr_matrix([[0,0,0],[1,0,0],[0,1,0]])
m # <3x3 sparse matrix of type '<type 'numpy.int64'>' with 2 stored elements in Compressed Sparse Row format>
io.mmwrite("test.mtx", m)
del m
newm = io.mmread("test.mtx")
newm # <3x3 sparse matrix of type '<type 'numpy.int32'>' with 2 stored elements in COOrdinate format>
newm.tocsr() # <3x3 sparse matrix of type '<type 'numpy.int32'>' with 2 stored elements in Compressed Sparse Row format>
newm.toarray() # array([[0, 0, 0], [1, 0, 0], [0, 1, 0]], dtype=int32)
添加回答
举报