# Use MAT.jl to save a .mat file containing a MATLAB struct array

**URL:** https://discourse.julialang.org/t/use-mat-jl-to-save-a-mat-file-containing-a-matlab-struct-array/63450
**Category:** General Usage
**Tags:** question, matlab
**Created:** [June 23, 2021, 3:39pm UTC](https://discourse.julialang.org/t/use-mat-jl-to-save-a-mat-file-containing-a-matlab-struct-array/63450 "2021-06-23T15:39:22Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![CameronBieganek](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cameronbieganek/32/6915_2.png) [@CameronBieganek](https://discourse.julialang.org/u/CameronBieganek)
#### Post date: [June 23, 2021, 3:39pm UTC](https://discourse.julialang.org/t/use-mat-jl-to-save-a-mat-file-containing-a-matlab-struct-array/63450/1 "2021-06-23T15:39:23Z")

</div>

Does anyone know if it’s possible to use [MAT.jl](https://github.com/JuliaIO/MAT.jl) to write a .mat file that contains a MATLAB struct array? It would be nice if something like this worked:

```julia
julia> using MAT

julia> struct A
           x::Int
           y::Int
       end

julia> matwrite("test.mat", Dict("x" => [A(1, 2), A(3, 4)]))
ERROR: This is the write function for CompositeKind, but the input doesn't fit
Stacktrace:
 [1] error(s::String)
   @ Base ./error.jl:33
 [2] m_write(mfile::MAT.MAT_HDF5.MatlabHDF5File, parent::HDF5.Group, name::String, s::A)
   @ MAT.MAT_HDF5 ~/.julia/packages/MAT/f523T/src/MAT_HDF5.jl:530
 [3] m_write(mfile::MAT.MAT_HDF5.MatlabHDF5File, parent::HDF5.File, name::String, data::Vector{A})
   @ MAT.MAT_HDF5 ~/.julia/packages/MAT/f523T/src/MAT_HDF5.jl:479
 [4] write(parent::MAT.MAT_HDF5.MatlabHDF5File, name::String, thing::Vector{A})
   @ MAT.MAT_HDF5 ~/.julia/packages/MAT/f523T/src/MAT_HDF5.jl:546
 [5] matwrite(filename::String, dict::Dict{String, Vector{A}}; compress::Bool)
   @ MAT ~/.julia/packages/MAT/f523T/src/MAT.jl:157
 [6] matwrite(filename::String, dict::Dict{String, Vector{A}})
   @ MAT ~/.julia/packages/MAT/f523T/src/MAT.jl:148
 [7] top-level scope
   @ REPL[14]:1

```

---

<div class="post-metadata">

### Author: ![CameronBieganek](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cameronbieganek/32/6915_2.png) [@CameronBieganek](https://discourse.julialang.org/u/CameronBieganek)
#### Post date: [June 23, 2021, 4:27pm UTC](https://discourse.julialang.org/t/use-mat-jl-to-save-a-mat-file-containing-a-matlab-struct-array/63450/2 "2021-06-23T16:27:32Z")

</div>

It looks like writing a vector of named tuples creates a MATLAB cell array of (scalar) structs, so I guess I can work with that.

#### Julia:

```julia
matwrite(
    "test.mat",
    Dict("x" => [(a = 1, b = 3.4, c = "hello"),
                 (a = 2, b = 1.1, c = "world")])
)

```

#### Matlab:

```matlab
>> x

x =

  2×1 cell array

    {1×1 struct}
    {1×1 struct}

>> x{1}

ans = 

  struct with fields:

    a: 1
    b: 3.4000
    c: 'hello'

```

---

<div class="post-metadata">

### Author: ![MatthijsCox](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/matthijscox/32/42831_2.png) [@MatthijsCox](https://discourse.julialang.org/u/MatthijsCox)
#### Post date: [November 25, 2025, 6:25pm UTC](https://discourse.julialang.org/t/use-mat-jl-to-save-a-mat-file-containing-a-matlab-struct-array/63450/3 "2025-11-25T18:25:33Z")

</div>

Note that you got a cell array of structs. Since MAT v0.11 you can now write actual struct arrays: [Object Arrays · MAT.jl](https://juliaio.github.io/MAT.jl/stable/object_arrays/)
