【发布时间】:2020-06-04 16:47:38
【问题描述】:
我有一个稀疏 csr 格式的矩阵,例如:
from scipy.sparse import csr_matrix
import numpy as np
row = np.array([0, 0, 1, 2, 2, 2])
col = np.array([0, 2, 2, 0, 1, 2])
data = np.array([1, 2, 3, 4, 5, 6])
M = csr_matrix((data, (row, col)), shape=(3, 3))
M.A =
array([[1, 0, 2],
[0, 0, 3],
[4, 5, 6]])
我正在使用以下方法对索引为 [2,0,1] 的矩阵重新排序:
order = np.array([2,0,1])
M = M[order,:]
M = M[:,order]
M.A
array([[6, 4, 5],
[2, 1, 0],
[3, 0, 0]])
这种方法有效,但对于我真正的 csr_matrix 是不可行的,它的大小为16580746 X 1672751804 并导致内存错误。
我采取了这样的另一种方法:
edge_list = zip(row,col,dat)
index = dict(zip(order, range(len(order))))
all_coeff = zip(*((index[u], index[v],d) for u,v,d in edge_list if u in index and v in index))
new_row,new_col,new_data = all_coeff
n = len(order)
graph = csr_matrix((new_data, (new_row, new_col)), shape=(n, n))
这也有效,但是对于大型稀疏矩阵也陷入了内存错误的陷阱。有什么建议可以有效地做到这一点?
【问题讨论】:
标签: python scipy networkx sparse-matrix adjacency-matrix