public void CanWriteComplex32Matrices() { var mat1 = new LinearAlgebra.Complex32.DenseMatrix(5, 3); for (var i = 0; i < mat1.ColumnCount; i++) { mat1[i, i] = new Complex32(i + .1f, i + .1f); } var mat2 = new LinearAlgebra.Complex32.DenseMatrix(4, 5); for (var i = 0; i < mat2.RowCount; i++) { mat2[i, i] = new Complex32(i + .1f, i + .1f); } var mat3 = new LinearAlgebra.Complex32.SparseMatrix(5, 4); mat3[0, 0] = new Complex32(1.1f, 1.1f); mat3[0, 2] = new Complex32(2.2f, 2.2f); mat3[4, 3] = new Complex32(3.3f, 3.3f); var mat4 = new LinearAlgebra.Complex32.SparseMatrix(3, 5); mat4[0, 0] = new Complex32(1.1f, 1.1f); mat4[0, 2] = new Complex32(2.2f, 2.2f); mat4[2, 4] = new Complex32(3.3f, 3.3f); var write = new LinearAlgebra.Complex32.Matrix[] { mat1, mat2, mat3, mat4 }; var names = new[] { "mat1", "dense_matrix_2", "s1", "sparse2" }; if (File.Exists("testc.mat")) { File.Delete("testc.mat"); } var writer = new MatlabMatrixWriter("testc.mat"); writer.WriteMatrices(write, names); writer.Dispose(); var reader = new MatlabMatrixReader <Complex32>("testc.mat"); var read = reader.ReadMatrices(names); Assert.AreEqual(write.Length, read.Count); for (var i = 0; i < write.Length; i++) { var w = write[i]; var r = read[names[i]]; Assert.AreEqual(w.RowCount, r.RowCount); Assert.AreEqual(w.ColumnCount, r.ColumnCount); Assert.IsTrue(w.Equals(r)); } }
public void CanWriteComplex32Matrices() { var mat1 = new LinearAlgebra.Complex32.DenseMatrix(5, 3); for (var i = 0; i < mat1.ColumnCount; i++) { mat1[i, i] = new Complex32(i + .1f, i + .1f); } var mat2 = new LinearAlgebra.Complex32.DenseMatrix(4, 5); for (var i = 0; i < mat2.RowCount; i++) { mat2[i, i] = new Complex32(i + .1f, i + .1f); } var mat3 = new LinearAlgebra.Complex32.SparseMatrix(5, 4); mat3[0, 0] = new Complex32(1.1f, 1.1f); mat3[0, 2] = new Complex32(2.2f, 2.2f); mat3[4, 3] = new Complex32(3.3f, 3.3f); var mat4 = new LinearAlgebra.Complex32.SparseMatrix(3, 5); mat4[0, 0] = new Complex32(1.1f, 1.1f); mat4[0, 2] = new Complex32(2.2f, 2.2f); mat4[2, 4] = new Complex32(3.3f, 3.3f); var write = new LinearAlgebra.Complex32.Matrix[] { mat1, mat2, mat3, mat4 }; var names = new[] { "mat1", "dense_matrix_2", "s1", "sparse2" }; if (File.Exists("testc.mat")) { File.Delete("testc.mat"); } var writer = new MatlabMatrixWriter("testc.mat"); writer.WriteMatrices(write, names); writer.Dispose(); var reader = new MatlabMatrixReader<Complex32>("testc.mat"); var read = reader.ReadMatrices(names); Assert.AreEqual(write.Length, read.Count); for (var i = 0; i < write.Length; i++) { var w = write[i]; var r = read[names[i]]; Assert.AreEqual(w.RowCount, r.RowCount); Assert.AreEqual(w.ColumnCount, r.ColumnCount); Assert.IsTrue(w.Equals(r)); } }
/// <summary> /// Gets the sparse data array. /// </summary> /// <param name="matrix">The matrix to get the data from.</param> /// <param name="name">The name of the matrix.</param> /// <returns>The matrix data as an array.</returns> static byte[] GetSparseDataArray(LinearAlgebra.Complex32.SparseMatrix matrix, string name) { byte[] data; using (var dataMemoryStream = new MemoryStream()) using (var dataWriter = new BinaryWriter(dataMemoryStream)) { var nzmax = matrix.NonZerosCount; WriteMatrixTagAndName(dataWriter, ArrayClass.Sparse, true, name, matrix.RowCount, matrix.ColumnCount, nzmax); // write ir dataWriter.Write((int)DataType.Int32); dataWriter.Write(nzmax * 4); foreach (var column in matrix.EnumerateColumns()) { foreach (var row in column.EnumerateNonZeroIndexed()) { dataWriter.Write(row.Item1); } } // add pad if needed if (nzmax % 2 == 1) { dataWriter.Write(0); } // write jc dataWriter.Write((int)DataType.Int32); dataWriter.Write((matrix.ColumnCount + 1) * 4); dataWriter.Write(0); var count = 0; foreach (var column in matrix.EnumerateColumns()) { count += ((SparseVectorStorage <Complex32>)column.Storage).ValueCount; dataWriter.Write(count); } // add pad if needed if (matrix.ColumnCount % 2 == 0) { dataWriter.Write(0); } // write data dataWriter.Write((int)DataType.Single); dataWriter.Write(nzmax * 4); foreach (var column in matrix.EnumerateColumns()) { foreach (var row in column.EnumerateNonZeroIndexed()) { dataWriter.Write(row.Item2.Real); } } var pad = (nzmax * 4) % 8; PadData(dataWriter, pad); dataWriter.Write((int)DataType.Single); dataWriter.Write(nzmax * 4); foreach (var column in matrix.EnumerateColumns()) { foreach (var row in column.EnumerateNonZeroIndexed()) { dataWriter.Write(row.Item2.Real); } } PadData(dataWriter, pad); data = dataMemoryStream.ToArray(); } return(data); }