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)