Crate matio_rs

source ·
Expand description

Rust bindings and wrappers for MATIO

This crate provides bindings and wrappers for MATIO: MATLAB MAT file I/O C library


Saving to a Mat file

use matio_rs::MatFile;
    .var("a", 1i8)?
    .var("b", 2f32)?
    .var("c", &vec![3u16; 3])?;

and then loading the data back into Rust

let mat_file = MatFile::load(data_path)?;
let a: i8 = mat_file.var("a")?;
let b: f32 = mat_file.var("b")?;
let c: Vec<u16> = mat_file.var("c")?;

Saving data to a Matlab structure

use matio_rs::{MatFile, Mat, MayBeFrom};
let mat_a = Mat::maybe_from("fa", 123f64)?;
let b = vec![0i32, 1, 2, 3, 4];
let mat_v = Mat::maybe_from("fb", &b)?;
let data = vec![mat_a, mat_v];
let mat_struct = Mat::maybe_from("s", data)?;
let mat_file = MatFile::save(data_path)?;

and then loading the structure fields back into Rust variables

use matio_rs::{MatFile, Mat, MayBeInto};
let mat_file = MatFile::load(&data_path)?;
let mat: Mat = mat_file.var("s")?;
let a: f64 = mat
let b: Vec<i32> = mat

Rust structure with the MatIO derive attribute can be dispatched like any other variables:

use matio_rs::{MatFile, MatIO};

#[derive(Debug, Default, MatIO)]
struct SMat {
    a: f64,
    b: Vec<u32>,
    s: Nested,
#[derive(Debug, Default, MatIO)]
struct Nested {
    a: f64,
    b: Vec<u32>,
let n = Nested {
    a: 1f64,
    b: vec![2, 3, 4, 5],
let a = SMat {
    a: 1f64,
    b: vec![2, 3, 4, 5],
    s: n,
MatFile::save(&file)?.var("a", &a)?;
let aa: SMat = MatFile::load(file)?.var("a")?;

Saving a Rust vector into a 3D Matlab array

use matio_rs::{MatFile, MatArray};
let data: Vec<_> = (0..24).collect();
        .array("array", &data, vec![3, 4, 2])?;

nalgebra vectors and matrices can be read from and written to Mat files providing the nalgebra feature

use matio_rs::MatFile;
let na_v = nalgebra::DVector::from_iterator(5, 0..5);
MatFile::save(&file).unwrap().var("na_v", &na_v).unwrap();
let v: nalgebra::DMatrix<i32> = MatFile::load(file).unwrap().var("na_v").unwrap();
use matio_rs::MatFile;
let na_m = nalgebra::DMatrix::from_iterator(3, 2, 0..6);
MatFile::save(&file).unwrap().var("na_m", &na_m).unwrap();
let m: nalgebra::DMatrix<i32> = MatFile::load(file).unwrap().var("na_m").unwrap();




Type Definitions

Derive Macros

  • Derive macro that implements for a structure of type T the traits MayBeFrom<&T> for Mat and MayBeInto<T> for Mat and &Mat