diff --git a/src/Numerics/LinearAlgebra/Complex/Matrix.cs b/src/Numerics/LinearAlgebra/Complex/Matrix.cs
index 9be6cdbc..fe7de0c2 100644
--- a/src/Numerics/LinearAlgebra/Complex/Matrix.cs
+++ b/src/Numerics/LinearAlgebra/Complex/Matrix.cs
@@ -204,6 +204,46 @@ namespace MathNet.Numerics.LinearAlgebra.Complex
return result;
}
+ ///
+ /// Calculates the value sum of each row vector.
+ ///
+ public override Vector RowSums()
+ {
+ var ret = new Complex[RowCount];
+ Storage.FoldByRowUnchecked(ret, (s, x) => s + x, (x, c) => x, ret, Zeros.AllowSkip);
+ return Vector.Build.Dense(ret);
+ }
+
+ ///
+ /// Calculates the absolute value sum of each row vector.
+ ///
+ public override Vector RowAbsoluteSums()
+ {
+ var ret = new Complex[RowCount];
+ Storage.FoldByRowUnchecked(ret, (s, x) => s + x.Magnitude, (x, c) => x, ret, Zeros.AllowSkip);
+ return Vector.Build.Dense(ret);
+ }
+
+ ///
+ /// Calculates the value sum of each column vector.
+ ///
+ public override Vector ColumnSums()
+ {
+ var ret = new Complex[ColumnCount];
+ Storage.FoldByColumnUnchecked(ret, (s, x) => s + x, (x, c) => x, ret, Zeros.AllowSkip);
+ return Vector.Build.Dense(ret);
+ }
+
+ ///
+ /// Calculates the absolute value sum of each column vector.
+ ///
+ public override Vector ColumnAbsoluteSums()
+ {
+ var ret = new Complex[ColumnCount];
+ Storage.FoldByColumnUnchecked(ret, (s, x) => s + x.Magnitude, (x, c) => x, ret, Zeros.AllowSkip);
+ return Vector.Build.Dense(ret);
+ }
+
///
/// Returns the conjugate transpose of this matrix.
///
diff --git a/src/Numerics/LinearAlgebra/Complex32/Matrix.cs b/src/Numerics/LinearAlgebra/Complex32/Matrix.cs
index 764b14a5..cf988d1b 100644
--- a/src/Numerics/LinearAlgebra/Complex32/Matrix.cs
+++ b/src/Numerics/LinearAlgebra/Complex32/Matrix.cs
@@ -198,6 +198,46 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32
return result;
}
+ ///
+ /// Calculates the value sum of each row vector.
+ ///
+ public override Vector RowSums()
+ {
+ var ret = new Complex32[RowCount];
+ Storage.FoldByRowUnchecked(ret, (s, x) => s + x, (x, c) => x, ret, Zeros.AllowSkip);
+ return Vector.Build.Dense(ret);
+ }
+
+ ///
+ /// Calculates the absolute value sum of each row vector.
+ ///
+ public override Vector RowAbsoluteSums()
+ {
+ var ret = new Complex32[RowCount];
+ Storage.FoldByRowUnchecked(ret, (s, x) => s + x.Magnitude, (x, c) => x, ret, Zeros.AllowSkip);
+ return Vector.Build.Dense(ret);
+ }
+
+ ///
+ /// Calculates the value sum of each column vector.
+ ///
+ public override Vector ColumnSums()
+ {
+ var ret = new Complex32[ColumnCount];
+ Storage.FoldByColumnUnchecked(ret, (s, x) => s + x, (x, c) => x, ret, Zeros.AllowSkip);
+ return Vector.Build.Dense(ret);
+ }
+
+ ///
+ /// Calculates the absolute value sum of each column vector.
+ ///
+ public override Vector ColumnAbsoluteSums()
+ {
+ var ret = new Complex32[ColumnCount];
+ Storage.FoldByColumnUnchecked(ret, (s, x) => s + x.Magnitude, (x, c) => x, ret, Zeros.AllowSkip);
+ return Vector.Build.Dense(ret);
+ }
+
///
/// Returns the conjugate transpose of this matrix.
///
diff --git a/src/Numerics/LinearAlgebra/Double/Matrix.cs b/src/Numerics/LinearAlgebra/Double/Matrix.cs
index 07086314..32766df8 100644
--- a/src/Numerics/LinearAlgebra/Double/Matrix.cs
+++ b/src/Numerics/LinearAlgebra/Double/Matrix.cs
@@ -196,6 +196,46 @@ namespace MathNet.Numerics.LinearAlgebra.Double
return result;
}
+ ///
+ /// Calculates the value sum of each row vector.
+ ///
+ public override Vector RowSums()
+ {
+ var ret = new double[RowCount];
+ Storage.FoldByRowUnchecked(ret, (s, x) => s + x, (x, c) => x, ret, Zeros.AllowSkip);
+ return Vector.Build.Dense(ret);
+ }
+
+ ///
+ /// Calculates the absolute value sum of each row vector.
+ ///
+ public override Vector RowAbsoluteSums()
+ {
+ var ret = new double[RowCount];
+ Storage.FoldByRowUnchecked(ret, (s, x) => s + Math.Abs(x), (x, c) => x, ret, Zeros.AllowSkip);
+ return Vector.Build.Dense(ret);
+ }
+
+ ///
+ /// Calculates the value sum of each column vector.
+ ///
+ public override Vector ColumnSums()
+ {
+ var ret = new double[ColumnCount];
+ Storage.FoldByColumnUnchecked(ret, (s, x) => s + x, (x, c) => x, ret, Zeros.AllowSkip);
+ return Vector.Build.Dense(ret);
+ }
+
+ ///
+ /// Calculates the absolute value sum of each column vector.
+ ///
+ public override Vector ColumnAbsoluteSums()
+ {
+ var ret = new double[ColumnCount];
+ Storage.FoldByColumnUnchecked(ret, (s, x) => s + Math.Abs(x), (x, c) => x, ret, Zeros.AllowSkip);
+ return Vector.Build.Dense(ret);
+ }
+
///
/// Returns the conjugate transpose of this matrix.
///
diff --git a/src/Numerics/LinearAlgebra/Matrix.Arithmetic.cs b/src/Numerics/LinearAlgebra/Matrix.Arithmetic.cs
index 829341ba..999b3921 100644
--- a/src/Numerics/LinearAlgebra/Matrix.Arithmetic.cs
+++ b/src/Numerics/LinearAlgebra/Matrix.Arithmetic.cs
@@ -1674,6 +1674,26 @@ namespace MathNet.Numerics.LinearAlgebra
///
public abstract Matrix NormalizeColumns(double norm);
+ ///
+ /// Calculates the value sum of each row vector.
+ ///
+ public abstract Vector RowSums();
+
+ ///
+ /// Calculates the value sum of each column vector.
+ ///
+ public abstract Vector ColumnSums();
+
+ ///
+ /// Calculates the absolute value sum of each row vector.
+ ///
+ public abstract Vector RowAbsoluteSums();
+
+ ///
+ /// Calculates the absolute value sum of each column vector.
+ ///
+ public abstract Vector ColumnAbsoluteSums();
+
#region Exceptions - possibly move elsewhere?
internal static Exception DimensionsDontMatch(Matrix left, Matrix right, Matrix result, string paramName = null)
diff --git a/src/Numerics/LinearAlgebra/Single/Matrix.cs b/src/Numerics/LinearAlgebra/Single/Matrix.cs
index 098111e1..c5898764 100644
--- a/src/Numerics/LinearAlgebra/Single/Matrix.cs
+++ b/src/Numerics/LinearAlgebra/Single/Matrix.cs
@@ -195,6 +195,45 @@ namespace MathNet.Numerics.LinearAlgebra.Single
Storage.MapIndexedTo(result.Storage, (i, j, x) => (float)norminv[j]*x, Zeros.AllowSkip, ExistingData.AssumeZeros);
return result;
}
+ ///
+ /// Calculates the value sum of each row vector.
+ ///
+ public override Vector RowSums()
+ {
+ var ret = new float[RowCount];
+ Storage.FoldByRowUnchecked(ret, (s, x) => s + x, (x, c) => x, ret, Zeros.AllowSkip);
+ return Vector.Build.Dense(ret);
+ }
+
+ ///
+ /// Calculates the absolute value sum of each row vector.
+ ///
+ public override Vector RowAbsoluteSums()
+ {
+ var ret = new float[RowCount];
+ Storage.FoldByRowUnchecked(ret, (s, x) => s + Math.Abs(x), (x, c) => x, ret, Zeros.AllowSkip);
+ return Vector.Build.Dense(ret);
+ }
+
+ ///
+ /// Calculates the value sum of each column vector.
+ ///
+ public override Vector ColumnSums()
+ {
+ var ret = new float[ColumnCount];
+ Storage.FoldByColumnUnchecked(ret, (s, x) => s + x, (x, c) => x, ret, Zeros.AllowSkip);
+ return Vector.Build.Dense(ret);
+ }
+
+ ///
+ /// Calculates the absolute value sum of each column vector.
+ ///
+ public override Vector ColumnAbsoluteSums()
+ {
+ var ret = new float[ColumnCount];
+ Storage.FoldByColumnUnchecked(ret, (s, x) => s + Math.Abs(x), (x, c) => x, ret, Zeros.AllowSkip);
+ return Vector.Build.Dense(ret);
+ }
///
/// Returns the conjugate transpose of this matrix.