matio-rs看起来已经很久没更新了,并且在安装了hdf5库的情况下无法完成编译
安装依赖 #
首先,安装依赖
cargo add ndarray matio-rs
也可以直接在toml文件中添加
.mat源文件 #
使用python的scipy读取,结果为
{'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Mon May 20 17:00:23 2024', '__version__': '1.0', '__globals__': [],
'name': array([[1145]], dtype=int32),
'age': array([[14]], dtype=int32),
'data': array([[-23, -24, -27, ..., 13, 14, 14],
[-16, -16, -17, ..., 12, 11, 13],
[ 8, 9, 11, ..., 0, -2, -1],
...,
[ -9, -8, -7, ..., 20, 17, 19],
[ -8, -7, -6, ..., 29, 27, 28],
[ 2, 3, 3, ..., 18, 15, 15]], dtype=int32),
'label': array([[7]], dtype=int32)}
使用matio-rs读取.mat文件 #
use ndarray::prelude::*;
use matio_rs::{MatFile, Mat, MatioError, MatFileRead};
fn main() -> Result<(),MatioError> {
let mat_path = "xxx.mat";
let mat_file: MatFileRead = matio_rs::MatFile::load(mat_path)?;
// Returns the list of variables within a MatFile
mat_file.info();
// Read the var
let mat_age: Vec<i32> = mat_file.var("data")?;
// To ndarray
let array1 = ndarray::Array::from_shape_vec((12,5000), mat_age);
println!("\n{:?}",array1);
Ok(())
}
Output:
Matlab var.: "name" with dims: [1, 1]
Matlab var.: "age" with dims: [1, 1]
Matlab var.: "data" with dims: [12, 5000]
Matlab var.: "label" with dims: [1, 1]
Ok([[-23, -16, 8, 21, -15, ..., 4, -13, 10, 14, -19],
[-19, 8, 3, -4, -9, ..., -4, -5, -4, 2, 5],
[-3, -1, 10, -1, -34, ..., 24, 2, -11, -15, 14],
[-6, -9, -3, 8, -1, ..., -15, 8, 8, -21, 39],
[35, 14, 13, -19, 16, ..., 1, -6, -5, 1, 6],
...,
[-9, -9, -16, -31, -11, ..., 18, 21, 7, -14, -14],
[18, -3, -10, -19, -2, ..., -11, -17, -13, -12, -4],
[-9, -9, 1, 10, -4, ..., -7, 14, -6, -14, -8],
[-34, -5, -4, -9, 13, ..., -5, -13, -19, -5, 17],
[-3, -12, 21, -20, 35, ..., 27, -12, 19, 28, 15]], shape=[12, 5000], strides=[5000, 1], layout=Cc (0x5), const ndim=2)