diff --git a/src/Examples/LinearAlgebra/VectorDataAccessor.cs b/src/Examples/LinearAlgebra/VectorDataAccessor.cs index 7c5740e4..8817fedc 100644 --- a/src/Examples/LinearAlgebra/VectorDataAccessor.cs +++ b/src/Examples/LinearAlgebra/VectorDataAccessor.cs @@ -158,7 +158,7 @@ namespace Examples.LinearAlgebraExamples // 12. Indexed non-zero enumerator usage Console.WriteLine(@"11. Non-Zero Enumerator usage"); - foreach (var value in vectorA.EnumerateNonZero()) + foreach (var value in vectorA.EnumerateNonZeroIndexed()) { Console.WriteLine(@"Index = {0}; Value = {1}", value.Item1, value.Item2.ToString("#0.00\t", formatProvider)); } diff --git a/src/FSharp/LinearAlgebra.Matrix.fs b/src/FSharp/LinearAlgebra.Matrix.fs index 1639c0dd..98f49acf 100644 --- a/src/FSharp/LinearAlgebra.Matrix.fs +++ b/src/FSharp/LinearAlgebra.Matrix.fs @@ -94,9 +94,36 @@ module MatrixExtensions = [] module Matrix = - /// Transform a vector into a 2D array. + /// Transform a matrix into a 2D array. let inline toArray2 (A: #Matrix<_>) = A.ToArray() + + /// Transform a matrix into a sequence. + let inline toSeq (v: #Matrix<_>) = v.Enumerate() + + /// Transform a matrix into an indexed sequence. + let inline toSeqi (v: #Matrix<_>) = v.EnumerateIndexed() + + /// Transform a matrix into a sequence where zero-values are skipped. + let inline toSeqnz (v: #Matrix<_>) = v.EnumerateNonZero() + + /// Transform a matrix into an indexed sequence where zero-values are skipped. + let inline toSeqinz (v: #Matrix<_>) = v.EnumerateNonZeroIndexed() + + + /// Transform a matrix into a column sequence. + let inline toColSeq (v: #Matrix<_>) = v.EnumerateColumns() + + /// Transform a matrix into an indexed column sequence. + let inline toColSeqi (v: #Matrix<_>) = v.EnumerateColumnsIndexed() + + /// Transform a matrix into a row sequence. + let inline toRowSeq (v: #Matrix<_>) = v.EnumerateRows() + + /// Transform a matrix into an indexed row sequence. + let inline toRowSeqi (v: #Matrix<_>) = v.EnumerateRowsIndexed() + + /// In-place map of every matrix element using a function. let inline mapInPlace f (A: #Matrix<_>) = A.MapInplace((fun x -> f x), true) @@ -115,6 +142,7 @@ module Matrix = let inline mapinzInPlace f (A: #Matrix<_>) = A.MapIndexedInplace((fun i j x -> f i j x), false) + /// In-place map every matrix column using the given position dependent function. let inline mapColsInPlace (f: int -> Vector<'a> -> Vector<'a>) (A: #Matrix<_>) = for j = 0 to A.ColumnCount-1 do diff --git a/src/FSharp/LinearAlgebra.Vector.fs b/src/FSharp/LinearAlgebra.Vector.fs index f8fe2270..8ad605e1 100644 --- a/src/FSharp/LinearAlgebra.Vector.fs +++ b/src/FSharp/LinearAlgebra.Vector.fs @@ -68,14 +68,19 @@ module Vector = /// Transform a vector into a list. let inline toList (v: #Vector<_>) = List.init v.Count v.At + /// Transform a vector into a sequence. let inline toSeq (v: #Vector<_>) = v.Enumerate() /// Transform a vector into an indexed sequence. let inline toSeqi (v: #Vector<_>) = v.EnumerateIndexed() - /// Transform a vector into an indexed sequence where zero-values may be skipped. - let inline toSeqinz (v: #Vector<_>) = v.EnumerateNonZero() + /// Transform a vector into a sequence where zero-values are skipped. + let inline toSeqnz (v: #Vector<_>) = v.EnumerateNonZero() + + /// Transform a vector into an indexed sequence where zero-values are skipped. + let inline toSeqinz (v: #Vector<_>) = v.EnumerateNonZeroIndexed() + /// In-place mutation by applying a function to every element of the vector. let inline mapInPlace f (v: #Vector<_>) = @@ -95,6 +100,7 @@ module Vector = let inline mapinzInPlace (f: int -> float -> float) (v: #Vector) = v.MapIndexedInplace((fun i x -> f i x), false) + /// Maps a vector to a new vector by applying a function to every element. let inline map f (v: #Vector<_>) = let w = v.Clone() @@ -121,35 +127,39 @@ module Vector = w.MapIndexedInplace((fun i x -> f i x), false) w + /// In-place vector addition. let inline addInPlace (v: #Vector<_>) (w: #Vector<_>) = v.Add(w, v) /// In place vector subtraction. let inline subInPlace (v: #Vector<_>) (w: #Vector<_>) = v.Subtract(w, v) + /// Applies a function to all elements of the vector. - let inline iter f (v: #Vector<_>) = Seq.iter f (v.Enumerate()) + let inline iter f (v: #Vector<_>) = v.Enumerate() |> Seq.iter f /// Applies a function to all indexed elements of the vector. - let inline iteri f (v: #Vector<_>) = Seq.iteri f (v.Enumerate()) + let inline iteri f (v: #Vector<_>) = v.Enumerate() |> Seq.iteri f /// Applies a function to all non-zero elements of the vector. - let inline iternz f (v: #Vector<_>) = v.EnumerateNonZero() |> Seq.iter (fun (_,v) -> f v) + let inline iternz f (v: #Vector<_>) = v.EnumerateNonZero() |> Seq.iter f /// Applies a function to all non-zero indexed elements of the vector. - let inline iterinz f (v: #Vector<_>) = v.EnumerateNonZero() |> Seq.iter (fun (i,v) -> f i v) + let inline iterinz f (v: #Vector<_>) = v.EnumerateNonZeroIndexed() |> Seq.iter (fun (i,v) -> f i v) + /// Fold all entries of a vector. - let inline fold f state (v: #Vector<_>) = Seq.fold f state (v.Enumerate()) + let inline fold f state (v: #Vector<_>) = v.Enumerate() |> Seq.fold f state /// Fold all entries of a vector using a position dependent folding function. - let inline foldi f acc0 (v: #Vector<_>) = v.EnumerateIndexed() |> Seq.fold (fun s (i,x) -> f i s x) acc0 + let inline foldi f state (v: #Vector<_>) = v.EnumerateIndexed() |> Seq.fold (fun s (i,x) -> f i s x) state /// Fold all non-zero entries of a vector. - let inline foldnz f acc0 (v: #Vector<_>) = v.EnumerateNonZero() |> Seq.fold (fun s (_,x) -> f s x) acc0 + let inline foldnz f state (v: #Vector<_>) = v.EnumerateNonZero() |> Seq.fold f state /// Fold all non-zero entries of a vector using a position dependent folding function. - let inline foldinz f acc0 (v: #Vector<_>) = v.EnumerateNonZero() |> Seq.fold (fun s (i,x) -> f i s x) acc0 + let inline foldinz f state (v: #Vector<_>) = v.EnumerateNonZeroIndexed() |> Seq.fold (fun s (i,x) -> f i s x) state + /// Fold all entries of a vector in reverse order. let inline foldBack f acc0 (v: #Vector<_>) = diff --git a/src/Numerics/LinearAlgebra/Complex/Solvers/Iterative/BiCgStab.cs b/src/Numerics/LinearAlgebra/Complex/Solvers/Iterative/BiCgStab.cs index 5ffba2fc..a44f2b66 100644 --- a/src/Numerics/LinearAlgebra/Complex/Solvers/Iterative/BiCgStab.cs +++ b/src/Numerics/LinearAlgebra/Complex/Solvers/Iterative/BiCgStab.cs @@ -532,7 +532,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers.Iterative for (var column = 0; column < input.ColumnCount; column++) { var solution = Solve(matrix, (Vector) input.Column(column)); - foreach (var element in solution.EnumerateNonZero()) + foreach (var element in solution.EnumerateNonZeroIndexed()) { result.At(element.Item1, column, element.Item2); } diff --git a/src/Numerics/LinearAlgebra/Complex/Solvers/Iterative/CompositeSolver.cs b/src/Numerics/LinearAlgebra/Complex/Solvers/Iterative/CompositeSolver.cs index 9a533133..83ae2595 100644 --- a/src/Numerics/LinearAlgebra/Complex/Solvers/Iterative/CompositeSolver.cs +++ b/src/Numerics/LinearAlgebra/Complex/Solvers/Iterative/CompositeSolver.cs @@ -623,7 +623,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers.Iterative for (var column = 0; column < input.ColumnCount; column++) { var solution = Solve(matrix, (Vector)input.Column(column)); - foreach (var element in solution.EnumerateNonZero()) + foreach (var element in solution.EnumerateNonZeroIndexed()) { result.At(element.Item1, column, element.Item2); } diff --git a/src/Numerics/LinearAlgebra/Complex/Solvers/Iterative/GpBiCg.cs b/src/Numerics/LinearAlgebra/Complex/Solvers/Iterative/GpBiCg.cs index c2a0b1ab..23c8fe88 100644 --- a/src/Numerics/LinearAlgebra/Complex/Solvers/Iterative/GpBiCg.cs +++ b/src/Numerics/LinearAlgebra/Complex/Solvers/Iterative/GpBiCg.cs @@ -632,7 +632,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers.Iterative for (var column = 0; column < input.ColumnCount; column++) { var solution = Solve(matrix, (Vector) input.Column(column)); - foreach (var element in solution.EnumerateNonZero()) + foreach (var element in solution.EnumerateNonZeroIndexed()) { result.At(element.Item1, column, element.Item2); } diff --git a/src/Numerics/LinearAlgebra/Complex/Solvers/Iterative/MlkBiCgStab.cs b/src/Numerics/LinearAlgebra/Complex/Solvers/Iterative/MlkBiCgStab.cs index 333c43b2..8c9e83c3 100644 --- a/src/Numerics/LinearAlgebra/Complex/Solvers/Iterative/MlkBiCgStab.cs +++ b/src/Numerics/LinearAlgebra/Complex/Solvers/Iterative/MlkBiCgStab.cs @@ -797,7 +797,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers.Iterative for (var column = 0; column < input.ColumnCount; column++) { var solution = Solve(matrix, (Vector) input.Column(column)); - foreach (var element in solution.EnumerateNonZero()) + foreach (var element in solution.EnumerateNonZeroIndexed()) { result.At(element.Item1, column, element.Item2); } diff --git a/src/Numerics/LinearAlgebra/Complex/Solvers/Iterative/TFQMR.cs b/src/Numerics/LinearAlgebra/Complex/Solvers/Iterative/TFQMR.cs index a28ccad5..fdead38e 100644 --- a/src/Numerics/LinearAlgebra/Complex/Solvers/Iterative/TFQMR.cs +++ b/src/Numerics/LinearAlgebra/Complex/Solvers/Iterative/TFQMR.cs @@ -531,7 +531,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Solvers.Iterative for (var column = 0; column < input.ColumnCount; column++) { var solution = Solve(matrix, (Vector) input.Column(column)); - foreach (var element in solution.EnumerateNonZero()) + foreach (var element in solution.EnumerateNonZeroIndexed()) { result.At(element.Item1, column, element.Item2); } diff --git a/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterative/BiCgStab.cs b/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterative/BiCgStab.cs index c48795a2..a0e81e5d 100644 --- a/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterative/BiCgStab.cs +++ b/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterative/BiCgStab.cs @@ -526,7 +526,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers.Iterative for (var column = 0; column < input.ColumnCount; column++) { var solution = Solve(matrix, (Vector) input.Column(column)); - foreach (var element in solution.EnumerateNonZero()) + foreach (var element in solution.EnumerateNonZeroIndexed()) { result.At(element.Item1, column, element.Item2); } diff --git a/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterative/CompositeSolver.cs b/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterative/CompositeSolver.cs index 9b35eb3d..eea9a4f6 100644 --- a/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterative/CompositeSolver.cs +++ b/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterative/CompositeSolver.cs @@ -623,7 +623,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers.Iterative for (var column = 0; column < input.ColumnCount; column++) { var solution = Solve(matrix, (Vector)input.Column(column)); - foreach (var element in solution.EnumerateNonZero()) + foreach (var element in solution.EnumerateNonZeroIndexed()) { result.At(element.Item1, column, element.Item2); } diff --git a/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterative/GpBiCg.cs b/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterative/GpBiCg.cs index f85afe52..adab5a69 100644 --- a/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterative/GpBiCg.cs +++ b/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterative/GpBiCg.cs @@ -631,7 +631,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers.Iterative for (var column = 0; column < input.ColumnCount; column++) { var solution = Solve(matrix, (Vector) input.Column(column)); - foreach (var element in solution.EnumerateNonZero()) + foreach (var element in solution.EnumerateNonZeroIndexed()) { result.At(element.Item1, column, element.Item2); } diff --git a/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterative/MlkBiCgStab.cs b/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterative/MlkBiCgStab.cs index ad485878..d0bd74f3 100644 --- a/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterative/MlkBiCgStab.cs +++ b/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterative/MlkBiCgStab.cs @@ -796,7 +796,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers.Iterative for (var column = 0; column < input.ColumnCount; column++) { var solution = Solve(matrix, (Vector) input.Column(column)); - foreach (var element in solution.EnumerateNonZero()) + foreach (var element in solution.EnumerateNonZeroIndexed()) { result.At(element.Item1, column, element.Item2); } diff --git a/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterative/TFQMR.cs b/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterative/TFQMR.cs index fe894536..07f07df1 100644 --- a/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterative/TFQMR.cs +++ b/src/Numerics/LinearAlgebra/Complex32/Solvers/Iterative/TFQMR.cs @@ -530,7 +530,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Solvers.Iterative for (var column = 0; column < input.ColumnCount; column++) { var solution = Solve(matrix, (Vector) input.Column(column)); - foreach (var element in solution.EnumerateNonZero()) + foreach (var element in solution.EnumerateNonZeroIndexed()) { result.At(element.Item1, column, element.Item2); } diff --git a/src/Numerics/LinearAlgebra/Double/Solvers/Iterative/BiCgStab.cs b/src/Numerics/LinearAlgebra/Double/Solvers/Iterative/BiCgStab.cs index ddd5862b..e40ec1ce 100644 --- a/src/Numerics/LinearAlgebra/Double/Solvers/Iterative/BiCgStab.cs +++ b/src/Numerics/LinearAlgebra/Double/Solvers/Iterative/BiCgStab.cs @@ -524,7 +524,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers.Iterative for (var column = 0; column < input.ColumnCount; column++) { var solution = Solve(matrix, (Vector)input.Column(column)); - foreach (var element in solution.EnumerateNonZero()) + foreach (var element in solution.EnumerateNonZeroIndexed()) { result.At(element.Item1, column, element.Item2); } diff --git a/src/Numerics/LinearAlgebra/Double/Solvers/Iterative/CompositeSolver.cs b/src/Numerics/LinearAlgebra/Double/Solvers/Iterative/CompositeSolver.cs index 7639ddcd..2345cc9f 100644 --- a/src/Numerics/LinearAlgebra/Double/Solvers/Iterative/CompositeSolver.cs +++ b/src/Numerics/LinearAlgebra/Double/Solvers/Iterative/CompositeSolver.cs @@ -620,7 +620,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers.Iterative for (var column = 0; column < input.ColumnCount; column++) { var solution = Solve(matrix, (Vector)input.Column(column)); - foreach (var element in solution.EnumerateNonZero()) + foreach (var element in solution.EnumerateNonZeroIndexed()) { result.At(element.Item1, column, element.Item2); } diff --git a/src/Numerics/LinearAlgebra/Double/Solvers/Iterative/GpBiCg.cs b/src/Numerics/LinearAlgebra/Double/Solvers/Iterative/GpBiCg.cs index 01dff3a1..04b75688 100644 --- a/src/Numerics/LinearAlgebra/Double/Solvers/Iterative/GpBiCg.cs +++ b/src/Numerics/LinearAlgebra/Double/Solvers/Iterative/GpBiCg.cs @@ -635,7 +635,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers.Iterative for (var column = 0; column < input.ColumnCount; column++) { var solution = Solve(matrix, (Vector)input.Column(column)); - foreach (var element in solution.EnumerateNonZero()) + foreach (var element in solution.EnumerateNonZeroIndexed()) { result.At(element.Item1, column, element.Item2); } diff --git a/src/Numerics/LinearAlgebra/Double/Solvers/Iterative/MlkBiCgStab.cs b/src/Numerics/LinearAlgebra/Double/Solvers/Iterative/MlkBiCgStab.cs index 5e713132..9546f0f4 100644 --- a/src/Numerics/LinearAlgebra/Double/Solvers/Iterative/MlkBiCgStab.cs +++ b/src/Numerics/LinearAlgebra/Double/Solvers/Iterative/MlkBiCgStab.cs @@ -794,7 +794,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers.Iterative for (var column = 0; column < input.ColumnCount; column++) { var solution = Solve(matrix, (Vector)input.Column(column)); - foreach (var element in solution.EnumerateNonZero()) + foreach (var element in solution.EnumerateNonZeroIndexed()) { result.At(element.Item1, column, element.Item2); } diff --git a/src/Numerics/LinearAlgebra/Double/Solvers/Iterative/TFQMR.cs b/src/Numerics/LinearAlgebra/Double/Solvers/Iterative/TFQMR.cs index ed03de6d..8de943c7 100644 --- a/src/Numerics/LinearAlgebra/Double/Solvers/Iterative/TFQMR.cs +++ b/src/Numerics/LinearAlgebra/Double/Solvers/Iterative/TFQMR.cs @@ -528,7 +528,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Solvers.Iterative for (var column = 0; column < input.ColumnCount; column++) { var solution = Solve(matrix, (Vector)input.Column(column)); - foreach (var element in solution.EnumerateNonZero()) + foreach (var element in solution.EnumerateNonZeroIndexed()) { result.At(element.Item1, column, element.Item2); } diff --git a/src/Numerics/LinearAlgebra/Matrix.cs b/src/Numerics/LinearAlgebra/Matrix.cs index a41d661e..3e8b2abf 100644 --- a/src/Numerics/LinearAlgebra/Matrix.cs +++ b/src/Numerics/LinearAlgebra/Matrix.cs @@ -1253,13 +1253,56 @@ namespace MathNet.Numerics.LinearAlgebra } } + /// + /// Returns this matrix as a multidimensional array. + /// + /// A multidimensional containing the values of this matrix. + public T[,] ToArray() + { + return Storage.ToArray(); + } + + /// + /// Returns the matrix's elements as an array with the data laid out column-wise. + /// + ///
+        /// 1, 2, 3
+        /// 4, 5, 6  will be returned as  1, 4, 7, 2, 5, 8, 3, 6, 9
+        /// 7, 8, 9
+        /// 
+ /// An array containing the matrix's elements. + /// + /// + public T[] ToColumnWiseArray() + { + return Storage.ToColumnMajorArray(); + } + + /// + /// Returns the matrix's elements as an array with the data laid row-wise. + /// + ///
+        /// 1, 2, 3
+        /// 4, 5, 6  will be returned as  1, 2, 3, 4, 5, 6, 7, 8, 9
+        /// 7, 8, 9
+        /// 
+ /// An array containing the matrix's elements. + /// + /// + public T[] ToRowWiseArray() + { + return Storage.ToRowMajorArray(); + } + /// /// Returns an IEnumerable that can be used to iterate through all values of the matrix. /// /// /// The enumerator will include all values, even if they are zero. - /// The ordering of the values is unspecified (not necessarily column by column or row by row). + /// The ordering of the values is unspecified (not necessarily column-wise or row-wise). /// + /// + /// public IEnumerable Enumerate() { return Storage.Enumerate(); @@ -1278,6 +1321,17 @@ namespace MathNet.Numerics.LinearAlgebra return Storage.EnumerateIndexed(); } + /// + /// Returns an IEnumerable that can be used to iterate through all non-zero values of the matrix. + /// + /// + /// The enumerator will skip all elements with a zero value. + /// + public IEnumerable EnumerateNonZero() + { + return Storage.EnumerateNonZero(); + } + /// /// Returns an IEnumerable that can be used to iterate through all non-zero values of the matrix and their index. /// @@ -1286,9 +1340,9 @@ namespace MathNet.Numerics.LinearAlgebra /// and the third value being the value of the element at that index. /// The enumerator will skip all elements with a zero value. /// - public IEnumerable> EnumerateNonZero() + public IEnumerable> EnumerateNonZeroIndexed() { - return Storage.EnumerateNonZero(); + return Storage.EnumerateNonZeroIndexed(); } /// @@ -1407,43 +1461,6 @@ namespace MathNet.Numerics.LinearAlgebra } } - /// - /// Returns this matrix as a multidimensional array. - /// - /// A multidimensional containing the values of this matrix. - public T[,] ToArray() - { - return Storage.ToArray(); - } - - /// - /// Returns the matrix's elements as an array with the data laid out column-wise. - /// - ///
-        /// 1, 2, 3
-        /// 4, 5, 6  will be returned as  1, 4, 7, 2, 5, 8, 3, 6, 9
-        /// 7, 8, 9
-        /// 
- /// An array containing the matrix's elements. - public T[] ToColumnWiseArray() - { - return Storage.ToColumnMajorArray(); - } - - /// - /// Returns the matrix's elements as an array with the data laid row-wise. - /// - ///
-        /// 1, 2, 3
-        /// 4, 5, 6  will be returned as  1, 2, 3, 4, 5, 6, 7, 8, 9
-        /// 7, 8, 9
-        /// 
- /// An array containing the matrix's elements. - public T[] ToRowWiseArray() - { - return Storage.ToRowMajorArray(); - } - /// /// Applies a function to each value of this matrix and replaces the value with its result. /// If forceMapZero is not set to true, zero values may or may not be skipped depending diff --git a/src/Numerics/LinearAlgebra/Single/Solvers/Iterative/BiCgStab.cs b/src/Numerics/LinearAlgebra/Single/Solvers/Iterative/BiCgStab.cs index 9aabe393..0acef0a0 100644 --- a/src/Numerics/LinearAlgebra/Single/Solvers/Iterative/BiCgStab.cs +++ b/src/Numerics/LinearAlgebra/Single/Solvers/Iterative/BiCgStab.cs @@ -524,7 +524,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.Iterative for (var column = 0; column < input.ColumnCount; column++) { var solution = Solve(matrix, (Vector)input.Column(column)); - foreach (var element in solution.EnumerateNonZero()) + foreach (var element in solution.EnumerateNonZeroIndexed()) { result.At(element.Item1, column, element.Item2); } diff --git a/src/Numerics/LinearAlgebra/Single/Solvers/Iterative/CompositeSolver.cs b/src/Numerics/LinearAlgebra/Single/Solvers/Iterative/CompositeSolver.cs index d972b1a4..016a80b8 100644 --- a/src/Numerics/LinearAlgebra/Single/Solvers/Iterative/CompositeSolver.cs +++ b/src/Numerics/LinearAlgebra/Single/Solvers/Iterative/CompositeSolver.cs @@ -623,7 +623,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.Iterative for (var column = 0; column < input.ColumnCount; column++) { var solution = Solve(matrix, (Vector)input.Column(column)); - foreach (var element in solution.EnumerateNonZero()) + foreach (var element in solution.EnumerateNonZeroIndexed()) { result.At(element.Item1, column, element.Item2); } diff --git a/src/Numerics/LinearAlgebra/Single/Solvers/Iterative/GpBiCg.cs b/src/Numerics/LinearAlgebra/Single/Solvers/Iterative/GpBiCg.cs index dc076997..6bbbd0ea 100644 --- a/src/Numerics/LinearAlgebra/Single/Solvers/Iterative/GpBiCg.cs +++ b/src/Numerics/LinearAlgebra/Single/Solvers/Iterative/GpBiCg.cs @@ -629,7 +629,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.Iterative for (var column = 0; column < input.ColumnCount; column++) { var solution = Solve(matrix, (Vector) input.Column(column)); - foreach (var element in solution.EnumerateNonZero()) + foreach (var element in solution.EnumerateNonZeroIndexed()) { result.At(element.Item1, column, element.Item2); } diff --git a/src/Numerics/LinearAlgebra/Single/Solvers/Iterative/MlkBiCgStab.cs b/src/Numerics/LinearAlgebra/Single/Solvers/Iterative/MlkBiCgStab.cs index 6c4491fb..251b265b 100644 --- a/src/Numerics/LinearAlgebra/Single/Solvers/Iterative/MlkBiCgStab.cs +++ b/src/Numerics/LinearAlgebra/Single/Solvers/Iterative/MlkBiCgStab.cs @@ -797,7 +797,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.Iterative for (var column = 0; column < input.ColumnCount; column++) { var solution = Solve(matrix, (Vector)input.Column(column)); - foreach (var element in solution.EnumerateNonZero()) + foreach (var element in solution.EnumerateNonZeroIndexed()) { result.At(element.Item1, column, element.Item2); } diff --git a/src/Numerics/LinearAlgebra/Single/Solvers/Iterative/TFQMR.cs b/src/Numerics/LinearAlgebra/Single/Solvers/Iterative/TFQMR.cs index 99874562..8ac4116f 100644 --- a/src/Numerics/LinearAlgebra/Single/Solvers/Iterative/TFQMR.cs +++ b/src/Numerics/LinearAlgebra/Single/Solvers/Iterative/TFQMR.cs @@ -528,7 +528,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Solvers.Iterative for (var column = 0; column < input.ColumnCount; column++) { var solution = Solve(matrix, (Vector) input.Column(column)); - foreach (var element in solution.EnumerateNonZero()) + foreach (var element in solution.EnumerateNonZeroIndexed()) { result.At(element.Item1, column, element.Item2); } diff --git a/src/Numerics/LinearAlgebra/Storage/DenseColumnMajorMatrixStorage.cs b/src/Numerics/LinearAlgebra/Storage/DenseColumnMajorMatrixStorage.cs index fd819131..995ee7f6 100644 --- a/src/Numerics/LinearAlgebra/Storage/DenseColumnMajorMatrixStorage.cs +++ b/src/Numerics/LinearAlgebra/Storage/DenseColumnMajorMatrixStorage.cs @@ -277,43 +277,6 @@ namespace MathNet.Numerics.LinearAlgebra.Storage return new DenseColumnMajorMatrixStorage(rows, columns, array); } - // ENUMERATION - - public override IEnumerable Enumerate() - { - return Data; - } - - public override IEnumerable> EnumerateIndexed() - { - int index = 0; - for (int j = 0; j < ColumnCount; j++) - { - for (int i = 0; i < RowCount; i++) - { - yield return new Tuple(i, j, Data[index]); - index++; - } - } - } - - public override IEnumerable> EnumerateNonZero() - { - int index = 0; - for (int j = 0; j < ColumnCount; j++) - { - for (int i = 0; i < RowCount; i++) - { - var x = Data[index]; - if (!Zero.Equals(x)) - { - yield return new Tuple(i, j, x); - } - index++; - } - } - } - // MATRIX COPY internal override void CopyToUnchecked(MatrixStorage target, bool skipClearing = false) @@ -448,6 +411,48 @@ namespace MathNet.Numerics.LinearAlgebra.Storage return ret; } + // ENUMERATION + + public override IEnumerable Enumerate() + { + return Data; + } + + public override IEnumerable> EnumerateIndexed() + { + int index = 0; + for (int j = 0; j < ColumnCount; j++) + { + for (int i = 0; i < RowCount; i++) + { + yield return new Tuple(i, j, Data[index]); + index++; + } + } + } + + public override IEnumerable EnumerateNonZero() + { + return Data.Where(x => !Zero.Equals(x)); + } + + public override IEnumerable> EnumerateNonZeroIndexed() + { + int index = 0; + for (int j = 0; j < ColumnCount; j++) + { + for (int i = 0; i < RowCount; i++) + { + var x = Data[index]; + if (!Zero.Equals(x)) + { + yield return new Tuple(i, j, x); + } + index++; + } + } + } + // FUNCTIONAL COMBINATORS public override void MapInplace(Func f, bool forceMapZeros = false) diff --git a/src/Numerics/LinearAlgebra/Storage/DenseVectorStorage.cs b/src/Numerics/LinearAlgebra/Storage/DenseVectorStorage.cs index 7f0b8bf2..2cd00635 100644 --- a/src/Numerics/LinearAlgebra/Storage/DenseVectorStorage.cs +++ b/src/Numerics/LinearAlgebra/Storage/DenseVectorStorage.cs @@ -153,29 +153,6 @@ namespace MathNet.Numerics.LinearAlgebra.Storage return new DenseVectorStorage(array.Length, array); } - // ENUMERATION - - public override IEnumerable Enumerate() - { - return Data; - } - - public override IEnumerable> EnumerateIndexed() - { - return Data.Select((t, i) => new Tuple(i, t)); - } - - public override IEnumerable> EnumerateNonZero() - { - for (var i = 0; i < Data.Length; i++) - { - if (!Zero.Equals(Data[i])) - { - yield return new Tuple(i, Data[i]); - } - } - } - // VECTOR COPY internal override void CopyToUnchecked(VectorStorage target, bool skipClearing = false) @@ -302,6 +279,34 @@ namespace MathNet.Numerics.LinearAlgebra.Storage } } + // ENUMERATION + + public override IEnumerable Enumerate() + { + return Data; + } + + public override IEnumerable> EnumerateIndexed() + { + return Data.Select((t, i) => new Tuple(i, t)); + } + + public override IEnumerable EnumerateNonZero() + { + return Data.Where(x => !Zero.Equals(x)); + } + + public override IEnumerable> EnumerateNonZeroIndexed() + { + for (var i = 0; i < Data.Length; i++) + { + if (!Zero.Equals(Data[i])) + { + yield return new Tuple(i, Data[i]); + } + } + } + // FUNCTIONAL COMBINATORS public override void MapInplace(Func f, bool forceMapZeros = false) diff --git a/src/Numerics/LinearAlgebra/Storage/DiagonalMatrixStorage.cs b/src/Numerics/LinearAlgebra/Storage/DiagonalMatrixStorage.cs index 2648aec0..adedb7a0 100644 --- a/src/Numerics/LinearAlgebra/Storage/DiagonalMatrixStorage.cs +++ b/src/Numerics/LinearAlgebra/Storage/DiagonalMatrixStorage.cs @@ -244,45 +244,6 @@ namespace MathNet.Numerics.LinearAlgebra.Storage return storage; } - // ENUMERATION - - public override IEnumerable Enumerate() - { - for (int j = 0; j < ColumnCount; j++) - { - for (int i = 0; i < RowCount; i++) - { - // PERF: consider to break up loop to avoid branching - yield return i == j ? Data[i] : Zero; - } - } - } - - public override IEnumerable> EnumerateIndexed() - { - for (int j = 0; j < ColumnCount; j++) - { - for (int i = 0; i < RowCount; i++) - { - // PERF: consider to break up loop to avoid branching - yield return i == j - ? new Tuple(i, i, Data[i]) - : new Tuple(i, j, Zero); - } - } - } - - public override IEnumerable> EnumerateNonZero() - { - for (int i = 0; i < Data.Length; i++) - { - if (!Zero.Equals(Data[i])) - { - yield return new Tuple(i, i, Data[i]); - } - } - } - // MATRIX COPY internal override void CopyToUnchecked(MatrixStorage target, bool skipClearing = false) @@ -566,6 +527,50 @@ namespace MathNet.Numerics.LinearAlgebra.Storage return ret; } + // ENUMERATION + + public override IEnumerable Enumerate() + { + for (int j = 0; j < ColumnCount; j++) + { + for (int i = 0; i < RowCount; i++) + { + // PERF: consider to break up loop to avoid branching + yield return i == j ? Data[i] : Zero; + } + } + } + + public override IEnumerable> EnumerateIndexed() + { + for (int j = 0; j < ColumnCount; j++) + { + for (int i = 0; i < RowCount; i++) + { + // PERF: consider to break up loop to avoid branching + yield return i == j + ? new Tuple(i, i, Data[i]) + : new Tuple(i, j, Zero); + } + } + } + + public override IEnumerable EnumerateNonZero() + { + return Data.Where(x => !Zero.Equals(x)); + } + + public override IEnumerable> EnumerateNonZeroIndexed() + { + for (int i = 0; i < Data.Length; i++) + { + if (!Zero.Equals(Data[i])) + { + yield return new Tuple(i, i, Data[i]); + } + } + } + // FUNCTIONAL COMBINATORS public override void MapInplace(Func f, bool forceMapZeros = false) diff --git a/src/Numerics/LinearAlgebra/Storage/MatrixStorage.cs b/src/Numerics/LinearAlgebra/Storage/MatrixStorage.cs index 5efc1888..f8d09423 100644 --- a/src/Numerics/LinearAlgebra/Storage/MatrixStorage.cs +++ b/src/Numerics/LinearAlgebra/Storage/MatrixStorage.cs @@ -227,45 +227,6 @@ namespace MathNet.Numerics.LinearAlgebra.Storage return hash; } - // ENUMERATION - - public virtual IEnumerable Enumerate() - { - for (int i = 0; i < RowCount; i++) - { - for (int j = 0; j < ColumnCount; j++) - { - yield return At(i, j); - } - } - } - - public virtual IEnumerable> EnumerateIndexed() - { - for (int i = 0; i < RowCount; i++) - { - for (int j = 0; j < ColumnCount; j++) - { - yield return new Tuple(i, j, At(i, j)); - } - } - } - - public virtual IEnumerable> EnumerateNonZero() - { - for (int i = 0; i < RowCount; i++) - { - for (int j = 0; j < ColumnCount; j++) - { - var x = At(i, j); - if (!Zero.Equals(x)) - { - yield return new Tuple(i, j, x); - } - } - } - } - // MATRIX COPY public void CopyTo(MatrixStorage target, bool skipClearing = false) @@ -452,6 +413,60 @@ namespace MathNet.Numerics.LinearAlgebra.Storage return ret; } + // ENUMERATION + + public virtual IEnumerable Enumerate() + { + for (int i = 0; i < RowCount; i++) + { + for (int j = 0; j < ColumnCount; j++) + { + yield return At(i, j); + } + } + } + + public virtual IEnumerable> EnumerateIndexed() + { + for (int i = 0; i < RowCount; i++) + { + for (int j = 0; j < ColumnCount; j++) + { + yield return new Tuple(i, j, At(i, j)); + } + } + } + + public virtual IEnumerable EnumerateNonZero() + { + for (int i = 0; i < RowCount; i++) + { + for (int j = 0; j < ColumnCount; j++) + { + var x = At(i, j); + if (!Zero.Equals(x)) + { + yield return x; + } + } + } + } + + public virtual IEnumerable> EnumerateNonZeroIndexed() + { + for (int i = 0; i < RowCount; i++) + { + for (int j = 0; j < ColumnCount; j++) + { + var x = At(i, j); + if (!Zero.Equals(x)) + { + yield return new Tuple(i, j, x); + } + } + } + } + // FUNCTIONAL COMBINATORS public virtual void MapInplace(Func f, bool forceMapZeros = false) diff --git a/src/Numerics/LinearAlgebra/Storage/SparseCompressedRowMatrixStorage.cs b/src/Numerics/LinearAlgebra/Storage/SparseCompressedRowMatrixStorage.cs index 24486539..1c1ffc86 100644 --- a/src/Numerics/LinearAlgebra/Storage/SparseCompressedRowMatrixStorage.cs +++ b/src/Numerics/LinearAlgebra/Storage/SparseCompressedRowMatrixStorage.cs @@ -30,6 +30,7 @@ using System; using System.Collections.Generic; +using System.Linq; using MathNet.Numerics.Properties; namespace MathNet.Numerics.LinearAlgebra.Storage @@ -638,52 +639,6 @@ namespace MathNet.Numerics.LinearAlgebra.Storage return storage; } - // ENUMERATION - - public override IEnumerable Enumerate() - { - int k = 0; - for (int row = 0; row < RowCount; row++) - { - for (int col = 0; col < ColumnCount; col++) - { - yield return k < (row < RowPointers.Length - 1 ? RowPointers[row + 1] : ValueCount) && (ColumnIndices[k]) == col - ? Values[k++] - : Zero; - } - } - } - - public override IEnumerable> EnumerateIndexed() - { - int k = 0; - for (int row = 0; row < RowCount; row++) - { - for (int col = 0; col < ColumnCount; col++) - { - yield return k < (row < RowPointers.Length - 1 ? RowPointers[row + 1] : ValueCount) && (ColumnIndices[k]) == col - ? new Tuple(row, col, Values[k++]) - : new Tuple(row, col, Zero); - } - } - } - - public override IEnumerable> EnumerateNonZero() - { - for (int row = 0; row < RowCount; row++) - { - var startIndex = RowPointers[row]; - var endIndex = row < RowPointers.Length - 1 ? RowPointers[row + 1] : ValueCount; - for (var j = startIndex; j < endIndex; j++) - { - if (!Zero.Equals(Values[j])) - { - yield return new Tuple(row, ColumnIndices[j], Values[j]); - } - } - } - } - // MATRIX COPY internal override void CopyToUnchecked(MatrixStorage target, bool skipClearing = false) @@ -958,6 +913,57 @@ namespace MathNet.Numerics.LinearAlgebra.Storage return ret; } + // ENUMERATION + + public override IEnumerable Enumerate() + { + int k = 0; + for (int row = 0; row < RowCount; row++) + { + for (int col = 0; col < ColumnCount; col++) + { + yield return k < (row < RowPointers.Length - 1 ? RowPointers[row + 1] : ValueCount) && (ColumnIndices[k]) == col + ? Values[k++] + : Zero; + } + } + } + + public override IEnumerable> EnumerateIndexed() + { + int k = 0; + for (int row = 0; row < RowCount; row++) + { + for (int col = 0; col < ColumnCount; col++) + { + yield return k < (row < RowPointers.Length - 1 ? RowPointers[row + 1] : ValueCount) && (ColumnIndices[k]) == col + ? new Tuple(row, col, Values[k++]) + : new Tuple(row, col, Zero); + } + } + } + + public override IEnumerable EnumerateNonZero() + { + return Values.Take(ValueCount).Where(x => !Zero.Equals(x)); + } + + public override IEnumerable> EnumerateNonZeroIndexed() + { + for (int row = 0; row < RowCount; row++) + { + var startIndex = RowPointers[row]; + var endIndex = row < RowPointers.Length - 1 ? RowPointers[row + 1] : ValueCount; + for (var j = startIndex; j < endIndex; j++) + { + if (!Zero.Equals(Values[j])) + { + yield return new Tuple(row, ColumnIndices[j], Values[j]); + } + } + } + } + // FUNCTIONAL COMBINATORS public override void MapInplace(Func f, bool forceMapZeros = false) diff --git a/src/Numerics/LinearAlgebra/Storage/SparseVectorStorage.cs b/src/Numerics/LinearAlgebra/Storage/SparseVectorStorage.cs index b59b6cf5..62b0d6e5 100644 --- a/src/Numerics/LinearAlgebra/Storage/SparseVectorStorage.cs +++ b/src/Numerics/LinearAlgebra/Storage/SparseVectorStorage.cs @@ -30,6 +30,7 @@ using System; using System.Collections.Generic; +using System.Linq; using MathNet.Numerics.Properties; namespace MathNet.Numerics.LinearAlgebra.Storage @@ -376,41 +377,6 @@ namespace MathNet.Numerics.LinearAlgebra.Storage }; } - // ENUMERATION - - public override IEnumerable Enumerate() - { - int k = 0; - for (int i = 0; i < Length; i++) - { - yield return k < ValueCount && Indices[k] == i - ? Values[k++] - : Zero; - } - } - - public override IEnumerable> EnumerateIndexed() - { - int k = 0; - for (int i = 0; i < Length; i++) - { - yield return k < ValueCount && Indices[k] == i - ? new Tuple(i, Values[k++]) - : new Tuple(i, Zero); - } - } - - public override IEnumerable> EnumerateNonZero() - { - for (var i = 0; i < ValueCount; i++) - { - if (!Zero.Equals(Values[i])) - { - yield return new Tuple(Indices[i], Values[i]); - } - } - } - // VECTOR COPY internal override void CopyToUnchecked(VectorStorage target, bool skipClearing = false) @@ -602,6 +568,46 @@ namespace MathNet.Numerics.LinearAlgebra.Storage } } + // ENUMERATION + + public override IEnumerable Enumerate() + { + int k = 0; + for (int i = 0; i < Length; i++) + { + yield return k < ValueCount && Indices[k] == i + ? Values[k++] + : Zero; + } + } + + public override IEnumerable> EnumerateIndexed() + { + int k = 0; + for (int i = 0; i < Length; i++) + { + yield return k < ValueCount && Indices[k] == i + ? new Tuple(i, Values[k++]) + : new Tuple(i, Zero); + } + } + + public override IEnumerable EnumerateNonZero() + { + return Values.Take(ValueCount).Where(x => !Zero.Equals(x)); + } + + public override IEnumerable> EnumerateNonZeroIndexed() + { + for (var i = 0; i < ValueCount; i++) + { + if (!Zero.Equals(Values[i])) + { + yield return new Tuple(Indices[i], Values[i]); + } + } + } + // FUNCTIONAL COMBINATORS public override void MapInplace(Func f, bool forceMapZeros = false) diff --git a/src/Numerics/LinearAlgebra/Storage/VectorStorage.cs b/src/Numerics/LinearAlgebra/Storage/VectorStorage.cs index 2e92d95f..925a67fb 100644 --- a/src/Numerics/LinearAlgebra/Storage/VectorStorage.cs +++ b/src/Numerics/LinearAlgebra/Storage/VectorStorage.cs @@ -198,36 +198,6 @@ namespace MathNet.Numerics.LinearAlgebra.Storage return hash; } - // ENUMERATION - - public virtual IEnumerable Enumerate() - { - for (var i = 0; i < Length; i++) - { - yield return At(i); - } - } - - public virtual IEnumerable> EnumerateIndexed() - { - for (var i = 0; i < Length; i++) - { - yield return new Tuple(i, At(i)); - } - } - - public virtual IEnumerable> EnumerateNonZero() - { - for (var i = 0; i < Length; i++) - { - var x = At(i); - if (!Zero.Equals(x)) - { - yield return new Tuple(i, x); - } - } - } - // VECTOR COPY public void CopyTo(VectorStorage target, bool skipClearing = false) @@ -400,6 +370,48 @@ namespace MathNet.Numerics.LinearAlgebra.Storage } } + // ENUMERATION + + public virtual IEnumerable Enumerate() + { + for (var i = 0; i < Length; i++) + { + yield return At(i); + } + } + + public virtual IEnumerable> EnumerateIndexed() + { + for (var i = 0; i < Length; i++) + { + yield return new Tuple(i, At(i)); + } + } + + public virtual IEnumerable EnumerateNonZero() + { + for (var i = 0; i < Length; i++) + { + var x = At(i); + if (!Zero.Equals(x)) + { + yield return x; + } + } + } + + public virtual IEnumerable> EnumerateNonZeroIndexed() + { + for (var i = 0; i < Length; i++) + { + var x = At(i); + if (!Zero.Equals(x)) + { + yield return new Tuple(i, x); + } + } + } + // FUNCTIONAL COMBINATORS public virtual void MapInplace(Func f, bool forceMapZeros = false) diff --git a/src/Numerics/LinearAlgebra/Vector.cs b/src/Numerics/LinearAlgebra/Vector.cs index 4c607fc2..e5343ce6 100644 --- a/src/Numerics/LinearAlgebra/Vector.cs +++ b/src/Numerics/LinearAlgebra/Vector.cs @@ -312,6 +312,17 @@ namespace MathNet.Numerics.LinearAlgebra return Storage.EnumerateIndexed(); } + /// + /// Returns an IEnumerable that can be used to iterate through all non-zero values of the vector. + /// + /// + /// The enumerator will skip all elements with a zero value. + /// + public IEnumerable EnumerateNonZero() + { + return Storage.EnumerateNonZero(); + } + /// /// Returns an IEnumerable that can be used to iterate through all non-zero values of the vector and their index. /// @@ -320,9 +331,9 @@ namespace MathNet.Numerics.LinearAlgebra /// and the second value being the value of the element at that index. /// The enumerator will skip all elements with a zero value. /// - public IEnumerable> EnumerateNonZero() + public IEnumerable> EnumerateNonZeroIndexed() { - return Storage.EnumerateNonZero(); + return Storage.EnumerateNonZeroIndexed(); } /// diff --git a/src/UnitTests/LinearAlgebraTests/Complex/VectorTests.cs b/src/UnitTests/LinearAlgebraTests/Complex/VectorTests.cs index 8fd7de0d..d115830c 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex/VectorTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex/VectorTests.cs @@ -258,7 +258,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex public void CanEnumerateOverVectorUsingNonZeroEnumerator() { var vector = CreateVector(Data); - foreach (var pair in vector.EnumerateNonZero()) + foreach (var pair in vector.EnumerateNonZeroIndexed()) { Assert.AreEqual(Data[pair.Item1], pair.Item2); Assert.AreNotEqual(Complex.Zero, pair.Item2); diff --git a/src/UnitTests/LinearAlgebraTests/Complex32/VectorTests.cs b/src/UnitTests/LinearAlgebraTests/Complex32/VectorTests.cs index 0786fcb7..622e835c 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex32/VectorTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex32/VectorTests.cs @@ -258,7 +258,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32 public void CanEnumerateOverVectorUsingNonZeroEnumerator() { var vector = CreateVector(Data); - foreach (var pair in vector.EnumerateNonZero()) + foreach (var pair in vector.EnumerateNonZeroIndexed()) { Assert.AreEqual(Data[pair.Item1], pair.Item2); Assert.AreNotEqual(Complex32.Zero, pair.Item2); diff --git a/src/UnitTests/LinearAlgebraTests/Double/VectorTests.cs b/src/UnitTests/LinearAlgebraTests/Double/VectorTests.cs index 495f3528..d5e1a1a9 100644 --- a/src/UnitTests/LinearAlgebraTests/Double/VectorTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Double/VectorTests.cs @@ -255,7 +255,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double public void CanEnumerateOverVectorUsingNonZeroEnumerator() { var vector = CreateVector(Data); - foreach (var pair in vector.EnumerateNonZero()) + foreach (var pair in vector.EnumerateNonZeroIndexed()) { Assert.AreEqual(Data[pair.Item1], pair.Item2); Assert.AreNotEqual(0d, pair.Item2); diff --git a/src/UnitTests/LinearAlgebraTests/Single/VectorTests.cs b/src/UnitTests/LinearAlgebraTests/Single/VectorTests.cs index af85ca68..cd48594a 100644 --- a/src/UnitTests/LinearAlgebraTests/Single/VectorTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Single/VectorTests.cs @@ -255,7 +255,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single public void CanEnumerateOverVectorUsingNonZeroEnumerator() { var vector = CreateVector(Data); - foreach (var pair in vector.EnumerateNonZero()) + foreach (var pair in vector.EnumerateNonZeroIndexed()) { Assert.AreEqual(Data[pair.Item1], pair.Item2); Assert.AreNotEqual(0f, pair.Item2);