diff --git a/src/Numerics/LinearAlgebra/Complex/SparseVector.cs b/src/Numerics/LinearAlgebra/Complex/SparseVector.cs index d5384960..46aa7502 100644 --- a/src/Numerics/LinearAlgebra/Complex/SparseVector.cs +++ b/src/Numerics/LinearAlgebra/Complex/SparseVector.cs @@ -682,6 +682,33 @@ namespace MathNet.Numerics.LinearAlgebra.Complex return _storage.Indices[index]; } + /// + /// Returns the index of the absolute maximum element. + /// + /// The index of absolute maximum element. + public override int AbsoluteMaximumIndex() + { + if (_storage.ValueCount == 0) + { + // No non-zero elements. Return 0 + return 0; + } + + var index = 0; + var max = _storage.Values[index].Magnitude; + for (var i = 1; i < _storage.ValueCount; i++) + { + var test = _storage.Values[i].Magnitude; + if (test > max) + { + index = i; + max = test; + } + } + + return _storage.Indices[index]; + } + /// /// Computes the sum of the vector's elements. /// diff --git a/src/Numerics/LinearAlgebra/Complex32/SparseVector.cs b/src/Numerics/LinearAlgebra/Complex32/SparseVector.cs index b82aa7a4..d888c315 100644 --- a/src/Numerics/LinearAlgebra/Complex32/SparseVector.cs +++ b/src/Numerics/LinearAlgebra/Complex32/SparseVector.cs @@ -677,6 +677,33 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32 return _storage.Indices[index]; } + /// + /// Returns the index of the absolute maximum element. + /// + /// The index of absolute maximum element. + public override int AbsoluteMaximumIndex() + { + if (_storage.ValueCount == 0) + { + // No non-zero elements. Return 0 + return 0; + } + + var index = 0; + var max = _storage.Values[index].Magnitude; + for (var i = 1; i < _storage.ValueCount; i++) + { + var test = _storage.Values[i].Magnitude; + if (test > max) + { + index = i; + max = test; + } + } + + return _storage.Indices[index]; + } + /// /// Computes the sum of the vector's elements. /// diff --git a/src/Numerics/LinearAlgebra/Double/SparseVector.cs b/src/Numerics/LinearAlgebra/Double/SparseVector.cs index 7bb2fc9a..08b79519 100644 --- a/src/Numerics/LinearAlgebra/Double/SparseVector.cs +++ b/src/Numerics/LinearAlgebra/Double/SparseVector.cs @@ -678,6 +678,33 @@ namespace MathNet.Numerics.LinearAlgebra.Double /// Returns the index of the absolute maximum element. /// /// The index of absolute maximum element. + public override int AbsoluteMaximumIndex() + { + if (_storage.ValueCount == 0) + { + // No non-zero elements. Return 0 + return 0; + } + + var index = 0; + var max = Math.Abs(_storage.Values[index]); + for (var i = 1; i < _storage.ValueCount; i++) + { + var test = Math.Abs(_storage.Values[i]); + if (test > max) + { + index = i; + max = test; + } + } + + return _storage.Indices[index]; + } + + /// + /// Returns the index of the maximum element. + /// + /// The index of maximum element. public override int MaximumIndex() { if (_storage.ValueCount == 0) diff --git a/src/Numerics/LinearAlgebra/Single/SparseVector.cs b/src/Numerics/LinearAlgebra/Single/SparseVector.cs index 1f78d586..e6efc9e0 100644 --- a/src/Numerics/LinearAlgebra/Single/SparseVector.cs +++ b/src/Numerics/LinearAlgebra/Single/SparseVector.cs @@ -679,6 +679,33 @@ namespace MathNet.Numerics.LinearAlgebra.Single /// Returns the index of the absolute maximum element. /// /// The index of absolute maximum element. + public override int AbsoluteMaximumIndex() + { + if (_storage.ValueCount == 0) + { + // No non-zero elements. Return 0 + return 0; + } + + var index = 0; + var max = Math.Abs(_storage.Values[index]); + for (var i = 1; i < _storage.ValueCount; i++) + { + var test = Math.Abs(_storage.Values[i]); + if (test > max) + { + index = i; + max = test; + } + } + + return _storage.Indices[index]; + } + + /// + /// Returns the index of the maximum element. + /// + /// The index of maximum element. public override int MaximumIndex() { if (_storage.ValueCount == 0)