scipy.sparse.csr_matrix创建稀疏矩阵及替代Matlab sparse报错解决
问题1:scipy.sparse.csr_matrix是否是Matlab sparse函数的合适替代方案?
是完全合适的替代方案。Matlab的sparse函数默认返回CSC(压缩稀疏列)格式的稀疏矩阵,scipy中也提供了对应的scipy.sparse.csc_matrix实现,你选用的csr_matrix是压缩稀疏行格式,除了内部存储的遍历顺序不同,创建稀疏矩阵的逻辑、后续矩阵运算的能力都和Matlab sparse完全匹配,可满足需求。
问题2:代码报错的原因
报错的核心原因是Matlab和Python的索引规则差异:
- Matlab的数组索引为1基,
sparse(i,j,v,m,n)允许i、j的取值范围是[1, m]和[1, n] - Scipy稀疏矩阵的索引为0基,
csr_matrix要求行、列索引的取值范围是[0, m-1]和[0, n-1]
你代码中的arg_x、arg_y沿用了Matlab侧的1基索引,最大值等于ndof=786432,超出了scipy允许的最大索引786431,因此触发行索引超限错误。
修复方案
仅需在传入索引时统一减1,转换为0基索引即可:
arg_shape = np.array([ndof, ndof]) K = csr_matrix((arg_data, (arg_x - 1, arg_y - 1)), shape=arg_shape)
内容的提问来源于stack exchange,提问作者Daniel Sempere
相关产品推荐
相关产品推荐

