diff --git a/src/Data/Matlab/MatlabMatrix.cs b/src/Data/Matlab/MatlabMatrix.cs index 61f89036..00f99c04 100644 --- a/src/Data/Matlab/MatlabMatrix.cs +++ b/src/Data/Matlab/MatlabMatrix.cs @@ -33,8 +33,14 @@ namespace MathNet.Numerics.Data.Matlab public class MatlabMatrix { internal byte[] Data { get; private set; } + + /// Name of the matrix public string Name { get; private set; } + + /// Matrix size in bytes public int Size { get; private set; } + + /// Number of dimensions public int Dimensions { get; private set; } internal MatlabMatrix(string name, int size, int dimensions, byte[] data) diff --git a/src/Data/Matlab/MatlabReader.cs b/src/Data/Matlab/MatlabReader.cs index 76329dc0..73f95ea1 100644 --- a/src/Data/Matlab/MatlabReader.cs +++ b/src/Data/Matlab/MatlabReader.cs @@ -44,7 +44,7 @@ namespace MathNet.Numerics.Data.Matlab /// /// List all compatible matrices from a MATLAB file stream. /// - public static List ListMatrices(Stream stream) + public static List List(Stream stream) { return Parser.ParseAll(stream); } @@ -52,7 +52,7 @@ namespace MathNet.Numerics.Data.Matlab /// /// List all compatible matrices from a MATLAB file. /// - public static List ListMatrices(string filePath) + public static List List(string filePath) { using (var stream = File.OpenRead(filePath)) { @@ -60,11 +60,21 @@ namespace MathNet.Numerics.Data.Matlab } } + /// + /// Unpacks the matrix of a MATLAB matrix data object. + /// + /// The data type of the Matrix. It can be either: double, float, Complex, or Complex32. + public static Matrix Unpack(MatlabMatrix matrixData) + where TDataType : struct, IEquatable, IFormattable + { + return Parser.ReadMatrixBlock(matrixData.Data); + } + /// /// Read the first or a specific matrix from a MATLAB file stream. /// /// The data type of the Matrix. It can be either: double, float, Complex, or Complex32. - public static Matrix ReadMatrix(Stream stream, string matrixName = null) + public static Matrix Read(Stream stream, string matrixName = null) where TDataType : struct, IEquatable, IFormattable { var matrices = Parser.ParseAll(stream); @@ -87,30 +97,20 @@ namespace MathNet.Numerics.Data.Matlab /// Read the first or a specific matrix from a MATLAB file. /// /// The data type of the Matrix. It can be either: double, float, Complex, or Complex32. - public static Matrix ReadMatrix(string filePath, string matrixName = null) + public static Matrix Read(string filePath, string matrixName = null) where TDataType : struct, IEquatable, IFormattable { using (var stream = File.OpenRead(filePath)) { - return ReadMatrix(stream, matrixName); + return Read(stream, matrixName); } } - /// - /// Read the matrix of a MATLAB matrix data object. - /// - /// The data type of the Matrix. It can be either: double, float, Complex, or Complex32. - public static Matrix ReadMatrix(MatlabMatrix matrixData) - where TDataType : struct, IEquatable, IFormattable - { - return Parser.ReadMatrixBlock(matrixData.Data); - } - /// /// Read all matrices or those with matching name from a MATLAB file stream. /// /// The data type of the Matrix. It can be either: double, float, Complex, or Complex32. - public static Dictionary> ReadMatrices(Stream stream, params string[] matrixNames) + public static Dictionary> ReadAll(Stream stream, params string[] matrixNames) where TDataType : struct, IEquatable, IFormattable { var names = new HashSet(matrixNames); @@ -123,12 +123,12 @@ namespace MathNet.Numerics.Data.Matlab /// Read all matrices or those with matching name from a MATLAB file. /// /// The data type of the Matrix. It can be either: double, float, Complex, or Complex32. - public static Dictionary> ReadMatrices(string filePath, params string[] matrixNames) + public static Dictionary> ReadAll(string filePath, params string[] matrixNames) where TDataType : struct, IEquatable, IFormattable { using (var stream = File.OpenRead(filePath)) { - return ReadMatrices(stream, matrixNames); + return ReadAll(stream, matrixNames); } } } diff --git a/src/Data/Matlab/Parser.cs b/src/Data/Matlab/Parser.cs index 8bf503e4..a2f297be 100644 --- a/src/Data/Matlab/Parser.cs +++ b/src/Data/Matlab/Parser.cs @@ -211,6 +211,7 @@ namespace MathNet.Numerics.Data.Matlab size = reader.ReadInt32(); smallBlock = false; } + reader.BaseStream.Seek(size, SeekOrigin.Current); AlignData(reader.BaseStream, size, smallBlock); diff --git a/src/DataUnitTests/Matlab/MatlabReaderTests.cs b/src/DataUnitTests/Matlab/MatlabReaderTests.cs index c4cf8655..bda5dcad 100644 --- a/src/DataUnitTests/Matlab/MatlabReaderTests.cs +++ b/src/DataUnitTests/Matlab/MatlabReaderTests.cs @@ -42,7 +42,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadAllMatrices() { - var matrices = MatlabReader.ReadMatrices("./data/Matlab/collection.mat"); + var matrices = MatlabReader.ReadAll("./data/Matlab/collection.mat"); Assert.AreEqual(30, matrices.Count); foreach (var matrix in matrices) { @@ -56,7 +56,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadFirstMatrix() { - var matrix = MatlabReader.ReadMatrix("./data/Matlab/A.mat"); + var matrix = MatlabReader.Read("./data/Matlab/A.mat"); Assert.AreEqual(100, matrix.RowCount); Assert.AreEqual(100, matrix.ColumnCount); Assert.AreEqual(typeof (LinearAlgebra.Double.DenseMatrix), matrix.GetType()); @@ -69,7 +69,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadNamedMatrices() { - var matrices = MatlabReader.ReadMatrices("./data/Matlab/collection.mat", "Ad", "Au64"); + var matrices = MatlabReader.ReadAll("./data/Matlab/collection.mat", "Ad", "Au64"); Assert.AreEqual(2, matrices.Count); foreach (var matrix in matrices) { @@ -83,7 +83,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadNamedMatrix() { - var matrices = MatlabReader.ReadMatrices("./data/Matlab/collection.mat", "Ad"); + var matrices = MatlabReader.ReadAll("./data/Matlab/collection.mat", "Ad"); Assert.AreEqual(1, matrices.Count); var ad = matrices["Ad"]; Assert.AreEqual(100, ad.RowCount); @@ -98,7 +98,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadNamedSparseMatrix() { - var matrix = MatlabReader.ReadMatrix("./data/Matlab/sparse-small.mat", "S"); + var matrix = MatlabReader.Read("./data/Matlab/sparse-small.mat", "S"); Assert.AreEqual(100, matrix.RowCount); Assert.AreEqual(100, matrix.ColumnCount); Assert.AreEqual(typeof (LinearAlgebra.Double.SparseMatrix), matrix.GetType()); @@ -111,7 +111,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadComplexAllMatrices() { - var matrices = MatlabReader.ReadMatrices("./data/Matlab/complex.mat"); + var matrices = MatlabReader.ReadAll("./data/Matlab/complex.mat"); Assert.AreEqual(3, matrices.Count); foreach (var matrix in matrices) { @@ -131,7 +131,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadSparseComplexAllMatrices() { - var matrices = MatlabReader.ReadMatrices("./data/Matlab/sparse_complex.mat"); + var matrices = MatlabReader.ReadAll("./data/Matlab/sparse_complex.mat"); Assert.AreEqual(3, matrices.Count); foreach (var matrix in matrices) { @@ -151,7 +151,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadNonComplexAllMatrices() { - var matrices = MatlabReader.ReadMatrices("./data/Matlab/collection.mat"); + var matrices = MatlabReader.ReadAll("./data/Matlab/collection.mat"); Assert.AreEqual(30, matrices.Count); foreach (var matrix in matrices) { @@ -165,7 +165,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadNonComplexFirstMatrix() { - var matrix = MatlabReader.ReadMatrix("./data/Matlab/A.mat"); + var matrix = MatlabReader.Read("./data/Matlab/A.mat"); Assert.AreEqual(100, matrix.RowCount); Assert.AreEqual(100, matrix.ColumnCount); Assert.AreEqual(typeof (LinearAlgebra.Complex.DenseMatrix), matrix.GetType()); @@ -178,7 +178,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadNonComplexNamedMatrices() { - var matrices = MatlabReader.ReadMatrices("./data/Matlab/collection.mat", "Ad", "Au64"); + var matrices = MatlabReader.ReadAll("./data/Matlab/collection.mat", "Ad", "Au64"); Assert.AreEqual(2, matrices.Count); foreach (var matrix in matrices) { @@ -192,7 +192,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadNonComplexNamedMatrix() { - var matrices = MatlabReader.ReadMatrices("./data/Matlab/collection.mat", "Ad"); + var matrices = MatlabReader.ReadAll("./data/Matlab/collection.mat", "Ad"); Assert.AreEqual(1, matrices.Count); var ad = matrices["Ad"]; Assert.AreEqual(100, ad.RowCount); @@ -207,7 +207,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadNonComplexNamedSparseMatrix() { - var matrix = MatlabReader.ReadMatrix("./data/Matlab/sparse-small.mat", "S"); + var matrix = MatlabReader.Read("./data/Matlab/sparse-small.mat", "S"); Assert.AreEqual(100, matrix.RowCount); Assert.AreEqual(100, matrix.ColumnCount); Assert.AreEqual(typeof (LinearAlgebra.Complex.SparseMatrix), matrix.GetType()); @@ -220,7 +220,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadComplex32AllMatrices() { - var matrices = MatlabReader.ReadMatrices("./data/Matlab/complex.mat"); + var matrices = MatlabReader.ReadAll("./data/Matlab/complex.mat"); Assert.AreEqual(3, matrices.Count); foreach (var matrix in matrices) { @@ -240,7 +240,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadSparseComplex32AllMatrices() { - var matrices = MatlabReader.ReadMatrices("./data/Matlab/sparse_complex.mat"); + var matrices = MatlabReader.ReadAll("./data/Matlab/sparse_complex.mat"); Assert.AreEqual(3, matrices.Count); foreach (var matrix in matrices) { @@ -260,7 +260,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadNonComplex32AllMatrices() { - var matrices = MatlabReader.ReadMatrices("./data/Matlab/collection.mat"); + var matrices = MatlabReader.ReadAll("./data/Matlab/collection.mat"); Assert.AreEqual(30, matrices.Count); foreach (var matrix in matrices) { @@ -274,7 +274,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadNonComplex32FirstMatrix() { - var matrix = MatlabReader.ReadMatrix("./data/Matlab/A.mat"); + var matrix = MatlabReader.Read("./data/Matlab/A.mat"); Assert.AreEqual(100, matrix.RowCount); Assert.AreEqual(100, matrix.ColumnCount); Assert.AreEqual(typeof (LinearAlgebra.Complex32.DenseMatrix), matrix.GetType()); @@ -287,7 +287,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadNonComplex32NamedMatrices() { - var matrices = MatlabReader.ReadMatrices("./data/Matlab/collection.mat", "Ad", "Au64"); + var matrices = MatlabReader.ReadAll("./data/Matlab/collection.mat", "Ad", "Au64"); Assert.AreEqual(2, matrices.Count); foreach (var matrix in matrices) { @@ -301,7 +301,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadNonComplex32NamedMatrix() { - var matrices = MatlabReader.ReadMatrices("./data/Matlab/collection.mat", "Ad"); + var matrices = MatlabReader.ReadAll("./data/Matlab/collection.mat", "Ad"); Assert.AreEqual(1, matrices.Count); var ad = matrices["Ad"]; Assert.AreEqual(100, ad.RowCount); @@ -316,7 +316,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadNonComplex32NamedSparseMatrix() { - var matrix = MatlabReader.ReadMatrix("./data/Matlab/sparse-small.mat", "S"); + var matrix = MatlabReader.Read("./data/Matlab/sparse-small.mat", "S"); Assert.AreEqual(100, matrix.RowCount); Assert.AreEqual(100, matrix.ColumnCount); Assert.AreEqual(typeof (LinearAlgebra.Complex32.SparseMatrix), matrix.GetType()); @@ -329,7 +329,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadFloatAllMatrices() { - var matrices = MatlabReader.ReadMatrices("./data/Matlab/collection.mat"); + var matrices = MatlabReader.ReadAll("./data/Matlab/collection.mat"); Assert.AreEqual(30, matrices.Count); foreach (var matrix in matrices) { @@ -343,7 +343,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadFloatFirstMatrix() { - var matrix = MatlabReader.ReadMatrix("./data/Matlab/A.mat"); + var matrix = MatlabReader.Read("./data/Matlab/A.mat"); Assert.AreEqual(100, matrix.RowCount); Assert.AreEqual(100, matrix.ColumnCount); Assert.AreEqual(typeof (LinearAlgebra.Single.DenseMatrix), matrix.GetType()); @@ -356,7 +356,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadFloatNamedMatrices() { - var matrices = MatlabReader.ReadMatrices("./data/Matlab/collection.mat", "Ad", "Au64"); + var matrices = MatlabReader.ReadAll("./data/Matlab/collection.mat", "Ad", "Au64"); Assert.AreEqual(2, matrices.Count); foreach (var matrix in matrices) { @@ -370,7 +370,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadFloatNamedMatrix() { - var matrices = MatlabReader.ReadMatrices("./data/Matlab/collection.mat", "Ad"); + var matrices = MatlabReader.ReadAll("./data/Matlab/collection.mat", "Ad"); Assert.AreEqual(1, matrices.Count); var ad = matrices["Ad"]; Assert.AreEqual(100, ad.RowCount); @@ -385,7 +385,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab [Test] public void CanReadFloatNamedSparseMatrix() { - var matrix = MatlabReader.ReadMatrix("./data/Matlab/sparse-small.mat", "S"); + var matrix = MatlabReader.Read("./data/Matlab/sparse-small.mat", "S"); Assert.AreEqual(100, matrix.RowCount); Assert.AreEqual(100, matrix.ColumnCount); Assert.AreEqual(typeof (LinearAlgebra.Single.SparseMatrix), matrix.GetType()); diff --git a/src/DataUnitTests/Matlab/MatlabWriterTests.cs b/src/DataUnitTests/Matlab/MatlabWriterTests.cs index 19f7a591..1e879711 100644 --- a/src/DataUnitTests/Matlab/MatlabWriterTests.cs +++ b/src/DataUnitTests/Matlab/MatlabWriterTests.cs @@ -116,7 +116,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab writer.WriteMatrices(write, names); writer.Dispose(); - var read = MatlabReader.ReadMatrices("testd.mat", names); + var read = MatlabReader.ReadAll("testd.mat", names); Assert.AreEqual(write.Length, read.Count); @@ -171,7 +171,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab writer.WriteMatrices(write, names); writer.Dispose(); - var read = MatlabReader.ReadMatrices("tests.mat", names); + var read = MatlabReader.ReadAll("tests.mat", names); Assert.AreEqual(write.Length, read.Count); @@ -226,7 +226,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab writer.WriteMatrices(write, names); writer.Dispose(); - var read = MatlabReader.ReadMatrices("testc.mat", names); + var read = MatlabReader.ReadAll("testc.mat", names); Assert.AreEqual(write.Length, read.Count); @@ -281,7 +281,7 @@ namespace MathNet.Numerics.Data.UnitTests.Matlab writer.WriteMatrices(write, names); writer.Dispose(); - var read = MatlabReader.ReadMatrices("testz.mat", names); + var read = MatlabReader.ReadAll("testz.mat", names); Assert.AreEqual(write.Length, read.Count);