Apparently a parser for matlab 5.0 doesn't exist in go. So, here we are.
The matlab format can be found in this pdf.
This is still very much a work in progress!
package main
import (
"fmt"
"os"
"github.com/daniellowtw/matlab"
)
func main() {
f, err := os.Open("example.mat")
if err != nil {
panic(err)
}
defer f.Close()
file, err := matlab.NewFileFromReader(f)
if err != nil {
panic(err)
}
fmt.Println(file.GetVarsNames()) // prints the variables in the mat file
matrix, _ := file.GetVar("a")
// convenient method to marshal into go types
var _ []int64 = matrix.IntArray()
floatMatrix, _ := file.GetVar("b")
// convenient method to marshal into go types
var _ []float64 = floatMatrix.DoubleArray()
}
A CellMatrix is a matrix where the values are matrices. The GetAtLocation
method allows indexing into the values array. A convenience method String()
on a Matrix is available to convert the CharArray matrix into a string.
Example:
cellMatrix, _ := file.GetVar("a")
firstElement := cellMatrix.GetAtLocation(0).(*Matrix).String()
SecondElement := cellMatrix.GetAtLocation(1).(*Matrix).DoubleArray()
Suppose we create a struct with the following:
X.w = [1];
# or X.w = 1
X.y = [2];
X.z = ["abc"];
# or X.z = "abc"
We can read it as follows:
structMatrix, _ := file.GetVar("X")
w := cellMatrix.Struct()["w"].GetAtLocation(0) // float64(1)
z := cellMatrix.Struct()["z"].String() // "abc"
- Support sparse array class within miMatrix parser
- Support object class within miMatrix parser
- Support writing to mat file