如何将Matlab中的sparse double稀疏矩阵正确导入到Julia中
解决方案
你的问题是直接对稀疏矩阵调用writematrix时,Matlab不会输出完整的行列排布的矩阵内容,导致Julia读取后格式不符合预期,以下是两种可直接复用的方案:
方案1:导出完整密集矩阵(推荐,266x266尺寸很小,操作最简单)
Matlab端导出代码
用full()函数先将稀疏矩阵转为普通密集矩阵,再导出:
% 导出单个矩阵 writematrix(full(modmat{1}), "Mat1.txt") % 如需批量导出10个矩阵,直接用循环即可 for i = 1:10 writematrix(full(modmat{i}), sprintf("Mat%d.txt", i)) end
Julia端导入代码
using DelimitedFiles # 导入单个矩阵,指定Int类型避免得到Any类型数组 M1 = readdlm("Mat1.txt", Int) # 批量导入10个矩阵 M = [readdlm("Mat$i.txt", Int) for i in 1:10]
方案2:导出稀疏坐标格式(适合大尺寸矩阵,节省存储空间)
Matlab端导出代码
用find()函数提取稀疏矩阵的非零元素坐标与数值,导出为三列文本:
% 导出单个矩阵 [I,J,V] = find(modmat{1}); writematrix([I J V], "Mat1_sparse.txt") % 批量导出 for i = 1:10 [I,J,V] = find(modmat{i}); writematrix([I J V], sprintf("Mat%d_sparse.txt", i)) end
Julia端导入代码
using DelimitedFiles, SparseArrays # 导入单个稀疏矩阵 coords = readdlm("Mat1_sparse.txt", Int) I, J, V = coords[:,1], coords[:,2], coords[:,3] # 生成266x266的稀疏矩阵,转普通矩阵调用Array()即可 M1_sparse = sparse(I, J, V, 266, 266) M1_full = Array(M1_sparse) # 批量导入 M_sparse = map(1:10) do i coords = readdlm("Mat$(i)_sparse.txt", Int) sparse(coords[:,1], coords[:,2], coords[:,3], 266, 266) end
内容的提问来源于stack exchange,提问作者newtothis
相关产品推荐
相关产品推荐

