You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:45:04