6.9 Matrix Enumeration (.NET, C#, CSharp, VB, Visual Basic, F#)
NMath matrix classes provide standard .NET GetEnumerator() methods for returning IEnumerator objects. For example:
Code Example – C# matrix
int rows = 13, cols = 3; var A = new DoubleMatrix( rows, cols, 0, .25 ); IEnumerator elements = A.GetEnumerator(); var data = new double[rows*cols]; i = 0; while ( elements.MoveNext() ) { data[i++] = (double) elements.Current; }
Code Example – VB matrix
Dim Rows As Integer = 13 Dim Cols As Integer = 3 Dim A As New DoubleMatrix(Rows, Cols, 0.0, 0.25) Dim Elements As IEnumerator = A.GetEnumerator() Dim Data(Rows * Cols) As Double Dim I As Integer = 0 While Elements.MoveNext() I += 1 Data(I) = CType(Elements.Current, Double) End While
Note that the Current property on an IEnumerator returns the current object in the collection, which must then be cast to the appropriate type. NMath also provides custom strongly-typed enumerators: IFloatEnumerator, IDoubleEnumerator, IFloatComplexEnumerator, and IDoubleComplexEnumerator. These avoid casting, and are therefore much faster.
For instance:
Code Example – C# matrix
int rows = 13, cols = 3; var A = new DoubleMatrix( rows, cols, 0, .25 ); IDoubleEnumerator elements = A.GetDoubleEnumerator(); var data = new double[rows*cols]; i = 0; while ( elements.MoveNext() ) { data[i++] = elements.Current; // No need to cast to double }
Code Example – VB matrix
Dim Rows As Integer = 13 Dim Cols As Integer = 3 Dim A As New DoubleMatrix(Rows, Cols, 0.0, 0.25) Dim Elements As IDoubleEnumerator = A.GetDoubleEnumerator() Dim Data(Rows * Cols) As Double Dim I As Integer = 0 While Elements.MoveNext() I += 1 Data(I) = Elements.Current ' No need to cast to Double End While