Exemple #1
0
        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));
            }
        }
Exemple #3
0
        /// <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);
        }