【问题标题】:Importing a matrix in Matlab to Julia将 Matlab 中的矩阵导入 Julia
【发布时间】:2022-01-05 14:32:47
【问题描述】:

我得到了一个 Matlab 文件,它应该包含一些矩阵。我在 Matlab 上在线打开它,它看起来像一个 Excel 表,其中每个单元格都有一个 double 类变量,并被称为 sparse double。如果我尝试打印它,它会给我一个坐标列表,后跟 1。例如:

(100,1)   1
(123,132) 1

我正在使用的矩阵只能有 0,1 作为元素,所以我假设所有其他坐标都为零。但是,我不知道如何将其显示为矩阵或以某种方式将其作为数组导入 Julia。我对 Matlab 一无所知,而且我什至不想在 Matlab 上工作,因为我的程序的其余部分都在 Julia 中。

编辑:正如评论所建议的,我只是留下我正在使用的代码以便尝试导入它。在 Matlab 程序中,我有一个“单元”格式的变量,其大小为 1x10,称为modmat。其中每一个都包含 1 个266x266 sparse double 矩阵,我以modmat{1}modmat{2} 等身份访问它。

Matlab:

writematrix(modmat{1},"Mat1.txt")

在朱莉娅:

> using DelimitedFiles
> M1 = open(readdlm,"Mat1.txt")

输出是一个266×1 Matrix{Any}: 变量

【问题讨论】:

  • 是的,Matlab 稀疏矩阵中未显示的条目是0。显示完整的矩阵转换为full(如果矩阵不是太大)。具体来说,在命令窗口中键入y = full(x),其中x 是矩阵名称。要从 Julia 导入,在 Matlab 中保存为文本文件可能会很方便;使用 writematrix (除非 Julia 可以直接读取 .mat 文件,我不懂那种语言)
  • 这似乎给了我 Julia 中的 266x1 数组,但原始矩阵是 266x266 矩阵。您能否指出一些我可以学习如何正确执行此操作的资源?
  • 我不认识朱莉娅,抱歉。也许懂语言的人会有所帮助。您是否检查过 Matlab 是否正确读取了保存的矩阵(readmatrix)?我建议您使用您在两种语言中使用的代码更新问题
  • @LuisMendo 我已按照您的建议编辑了问题。

标签: arrays matlab julia sparse-matrix


【解决方案1】:

我会推荐MAT.jl 包以安全有效地读取mat 文件。看起来它也可以读取稀疏矩阵,甚至可以一口气读取整个单元格数组。

为了完整起见(如果您由于某种原因无法执行上述操作),这里是您如何读取包含格式行的文件

(100,1)   1
(123,132) 1

function readsparsemat(io::IO)
  linere = r"^\((\d+),(\d+)\) # coordinates
             \s+              # some number of spaces
             1$               # 1 at the end of the line
             "x               # extended regex complete

  matches = match.(linere, readlines(io))
  coords = [parse.(Int, (m[1], m[2])) for m in matches]

  sparse(first.(coords), last.(coords), true)
  
end
julia> readsparsemat(IOBuffer("(10,1)   1
       (12,13) 1
       ")) # test with an IOBuffer
12×13 SparseMatrixCSC{Bool, Int64} with 2 stored entries:
...

julia> open(readsparsemat, "matfilename") #actual usage

【讨论】:

  • 谢谢!我知道 MAT.jl 包,但由于我没有本地安装 Matlab,我无法使用它。感谢您提供的替代方法。
猜你喜欢
  • 2014-11-01
  • 2017-07-01
  • 1970-01-01
  • 2020-02-23
  • 1970-01-01
  • 2013-01-22
  • 2011-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多