# C# Sparse Matrix Example

← All NMath Code Examples

```ï»¿using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;

using CenterSpace.NMath.Core;
using CenterSpace.NMath.Matrix;

namespace CenterSpace.NMath.Matrix.Examples.CSharp
{
/// <summary>
/// A .NET example in C# showing simple sparse matrix functionality.
/// </summary>
class SparseMatrixExample
{

static void Main( string[] args )
{

Console.WriteLine();
Console.WriteLine( "A is a {0}x{1} complex-valued sparse matrix with {2} nonzero entries.",
A.Rows, A.Cols, A.Data.NumberNonZero );
DoubleComplexCsrSparseMatrix AHA = MatrixFunctions.ConjTransposeProduct( A, A );
Console.WriteLine( "The conjugate transpose product of A with itself has {0} nonzero entries.",
AHA.Data.NumberNonZero );
var v = new DoubleComplexVector( A.Cols, 1 );
DoubleComplexVector Av = MatrixFunctions.Product( A, v );
Console.WriteLine( "The product of a with a dense vector, v, has length {0}", Av.Length );

Console.WriteLine();
Console.WriteLine( "Press Enter Key" );
}

{
char[] delimiters = { ' ' };
int lineCount = 0;
int rows = 0, cols = 0, numberNonzero = 0;
var coordValues = new Dictionary<IntPair, DoubleComplex>();
for ( ;;)
{
if ( line == null ) break;
if ( lineCount == 0 ) // First non-comment, read rows, columns, and number nonzero
{
string[] matrixInfo = line.Split( delimiters, StringSplitOptions.RemoveEmptyEntries );
if ( matrixInfo.Length != 3 )
{
throw new Exception( "Invalid MTX file" );
}
rows = Int32.Parse( matrixInfo[0] );
cols = Int32.Parse( matrixInfo[1] );
numberNonzero = Int32.Parse( matrixInfo[2] );
}
else
{
// Line should have 4 entries, a row index, a column index, real and imaginary
// parts of the value.
string[] rowColValue = line.Split( delimiters, StringSplitOptions.RemoveEmptyEntries );
if ( rowColValue.Length != 4 )
{
throw new Exception( "Invalid MTX file" + line );
}
int row = Int32.Parse( rowColValue[0] ) - 1; // mtx files use one-based indexing.
int col = Int32.Parse( rowColValue[1] ) - 1;
double re = Double.Parse( rowColValue[2] );
double im = Double.Parse( rowColValue[3] );
coordValues.Add( new IntPair( row, col ), new DoubleComplex( re, im ) );
}
++lineCount;