Browse Source

LA: Matrix Column/Row sums and absolute-sums

pull/222/head
Christoph Ruegg 12 years ago
parent
commit
c2f4415dc2
  1. 40
      src/Numerics/LinearAlgebra/Complex/Matrix.cs
  2. 40
      src/Numerics/LinearAlgebra/Complex32/Matrix.cs
  3. 40
      src/Numerics/LinearAlgebra/Double/Matrix.cs
  4. 20
      src/Numerics/LinearAlgebra/Matrix.Arithmetic.cs
  5. 39
      src/Numerics/LinearAlgebra/Single/Matrix.cs

40
src/Numerics/LinearAlgebra/Complex/Matrix.cs

@ -204,6 +204,46 @@ namespace MathNet.Numerics.LinearAlgebra.Complex
return result;
}
/// <summary>
/// Calculates the value sum of each row vector.
/// </summary>
public override Vector<Complex> RowSums()
{
var ret = new Complex[RowCount];
Storage.FoldByRowUnchecked(ret, (s, x) => s + x, (x, c) => x, ret, Zeros.AllowSkip);
return Vector<Complex>.Build.Dense(ret);
}
/// <summary>
/// Calculates the absolute value sum of each row vector.
/// </summary>
public override Vector<Complex> RowAbsoluteSums()
{
var ret = new Complex[RowCount];
Storage.FoldByRowUnchecked(ret, (s, x) => s + x.Magnitude, (x, c) => x, ret, Zeros.AllowSkip);
return Vector<Complex>.Build.Dense(ret);
}
/// <summary>
/// Calculates the value sum of each column vector.
/// </summary>
public override Vector<Complex> ColumnSums()
{
var ret = new Complex[ColumnCount];
Storage.FoldByColumnUnchecked(ret, (s, x) => s + x, (x, c) => x, ret, Zeros.AllowSkip);
return Vector<Complex>.Build.Dense(ret);
}
/// <summary>
/// Calculates the absolute value sum of each column vector.
/// </summary>
public override Vector<Complex> ColumnAbsoluteSums()
{
var ret = new Complex[ColumnCount];
Storage.FoldByColumnUnchecked(ret, (s, x) => s + x.Magnitude, (x, c) => x, ret, Zeros.AllowSkip);
return Vector<Complex>.Build.Dense(ret);
}
/// <summary>
/// Returns the conjugate transpose of this matrix.
/// </summary>

40
src/Numerics/LinearAlgebra/Complex32/Matrix.cs

@ -198,6 +198,46 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32
return result;
}
/// <summary>
/// Calculates the value sum of each row vector.
/// </summary>
public override Vector<Complex32> RowSums()
{
var ret = new Complex32[RowCount];
Storage.FoldByRowUnchecked(ret, (s, x) => s + x, (x, c) => x, ret, Zeros.AllowSkip);
return Vector<Complex32>.Build.Dense(ret);
}
/// <summary>
/// Calculates the absolute value sum of each row vector.
/// </summary>
public override Vector<Complex32> RowAbsoluteSums()
{
var ret = new Complex32[RowCount];
Storage.FoldByRowUnchecked(ret, (s, x) => s + x.Magnitude, (x, c) => x, ret, Zeros.AllowSkip);
return Vector<Complex32>.Build.Dense(ret);
}
/// <summary>
/// Calculates the value sum of each column vector.
/// </summary>
public override Vector<Complex32> ColumnSums()
{
var ret = new Complex32[ColumnCount];
Storage.FoldByColumnUnchecked(ret, (s, x) => s + x, (x, c) => x, ret, Zeros.AllowSkip);
return Vector<Complex32>.Build.Dense(ret);
}
/// <summary>
/// Calculates the absolute value sum of each column vector.
/// </summary>
public override Vector<Complex32> ColumnAbsoluteSums()
{
var ret = new Complex32[ColumnCount];
Storage.FoldByColumnUnchecked(ret, (s, x) => s + x.Magnitude, (x, c) => x, ret, Zeros.AllowSkip);
return Vector<Complex32>.Build.Dense(ret);
}
/// <summary>
/// Returns the conjugate transpose of this matrix.
/// </summary>

40
src/Numerics/LinearAlgebra/Double/Matrix.cs

@ -196,6 +196,46 @@ namespace MathNet.Numerics.LinearAlgebra.Double
return result;
}
/// <summary>
/// Calculates the value sum of each row vector.
/// </summary>
public override Vector<double> RowSums()
{
var ret = new double[RowCount];
Storage.FoldByRowUnchecked(ret, (s, x) => s + x, (x, c) => x, ret, Zeros.AllowSkip);
return Vector<double>.Build.Dense(ret);
}
/// <summary>
/// Calculates the absolute value sum of each row vector.
/// </summary>
public override Vector<double> RowAbsoluteSums()
{
var ret = new double[RowCount];
Storage.FoldByRowUnchecked(ret, (s, x) => s + Math.Abs(x), (x, c) => x, ret, Zeros.AllowSkip);
return Vector<double>.Build.Dense(ret);
}
/// <summary>
/// Calculates the value sum of each column vector.
/// </summary>
public override Vector<double> ColumnSums()
{
var ret = new double[ColumnCount];
Storage.FoldByColumnUnchecked(ret, (s, x) => s + x, (x, c) => x, ret, Zeros.AllowSkip);
return Vector<double>.Build.Dense(ret);
}
/// <summary>
/// Calculates the absolute value sum of each column vector.
/// </summary>
public override Vector<double> ColumnAbsoluteSums()
{
var ret = new double[ColumnCount];
Storage.FoldByColumnUnchecked(ret, (s, x) => s + Math.Abs(x), (x, c) => x, ret, Zeros.AllowSkip);
return Vector<double>.Build.Dense(ret);
}
/// <summary>
/// Returns the conjugate transpose of this matrix.
/// </summary>

20
src/Numerics/LinearAlgebra/Matrix.Arithmetic.cs

@ -1674,6 +1674,26 @@ namespace MathNet.Numerics.LinearAlgebra
/// </summary>
public abstract Matrix<T> NormalizeColumns(double norm);
/// <summary>
/// Calculates the value sum of each row vector.
/// </summary>
public abstract Vector<T> RowSums();
/// <summary>
/// Calculates the value sum of each column vector.
/// </summary>
public abstract Vector<T> ColumnSums();
/// <summary>
/// Calculates the absolute value sum of each row vector.
/// </summary>
public abstract Vector<T> RowAbsoluteSums();
/// <summary>
/// Calculates the absolute value sum of each column vector.
/// </summary>
public abstract Vector<T> ColumnAbsoluteSums();
#region Exceptions - possibly move elsewhere?
internal static Exception DimensionsDontMatch<TException>(Matrix<T> left, Matrix<T> right, Matrix<T> result, string paramName = null)

39
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;
}
/// <summary>
/// Calculates the value sum of each row vector.
/// </summary>
public override Vector<float> RowSums()
{
var ret = new float[RowCount];
Storage.FoldByRowUnchecked(ret, (s, x) => s + x, (x, c) => x, ret, Zeros.AllowSkip);
return Vector<float>.Build.Dense(ret);
}
/// <summary>
/// Calculates the absolute value sum of each row vector.
/// </summary>
public override Vector<float> RowAbsoluteSums()
{
var ret = new float[RowCount];
Storage.FoldByRowUnchecked(ret, (s, x) => s + Math.Abs(x), (x, c) => x, ret, Zeros.AllowSkip);
return Vector<float>.Build.Dense(ret);
}
/// <summary>
/// Calculates the value sum of each column vector.
/// </summary>
public override Vector<float> ColumnSums()
{
var ret = new float[ColumnCount];
Storage.FoldByColumnUnchecked(ret, (s, x) => s + x, (x, c) => x, ret, Zeros.AllowSkip);
return Vector<float>.Build.Dense(ret);
}
/// <summary>
/// Calculates the absolute value sum of each column vector.
/// </summary>
public override Vector<float> ColumnAbsoluteSums()
{
var ret = new float[ColumnCount];
Storage.FoldByColumnUnchecked(ret, (s, x) => s + Math.Abs(x), (x, c) => x, ret, Zeros.AllowSkip);
return Vector<float>.Build.Dense(ret);
}
/// <summary>
/// Returns the conjugate transpose of this matrix.

Loading…
Cancel
Save