Browse Source

LA: dense-diagonal TransposeThisAndMultiply

optimization-3
Christoph Ruegg 13 years ago
parent
commit
2e1dc29f96
  1. 32
      src/Numerics/LinearAlgebra/Complex/DenseMatrix.cs
  2. 32
      src/Numerics/LinearAlgebra/Complex32/DenseMatrix.cs
  3. 32
      src/Numerics/LinearAlgebra/Double/DenseMatrix.cs
  4. 32
      src/Numerics/LinearAlgebra/Single/DenseMatrix.cs
  5. 19
      src/UnitTests/LinearAlgebraTests/Complex/DiagonalMatrixTests.cs
  6. 19
      src/UnitTests/LinearAlgebraTests/Complex32/DiagonalMatrixTests.cs
  7. 19
      src/UnitTests/LinearAlgebraTests/Double/DiagonalMatrixTests.cs
  8. 19
      src/UnitTests/LinearAlgebraTests/Single/DiagonalMatrixTests.cs

32
src/Numerics/LinearAlgebra/Complex/DenseMatrix.cs

@ -767,12 +767,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex
{ {
var denseOther = other as DenseMatrix; var denseOther = other as DenseMatrix;
var denseResult = result as DenseMatrix; var denseResult = result as DenseMatrix;
if (denseOther != null && denseResult != null)
if (denseOther == null || denseResult == null)
{
base.DoTransposeThisAndMultiply(other, result);
}
else
{ {
Control.LinearAlgebraProvider.MatrixMultiplyWithUpdate( Control.LinearAlgebraProvider.MatrixMultiplyWithUpdate(
Providers.LinearAlgebra.Transpose.Transpose, Providers.LinearAlgebra.Transpose.Transpose,
@ -786,7 +781,32 @@ namespace MathNet.Numerics.LinearAlgebra.Complex
denseOther._columnCount, denseOther._columnCount,
0.0, 0.0,
denseResult._values); denseResult._values);
return;
} }
var diagonalOther = other.Storage as DiagonalMatrixStorage<Complex>;
if (diagonalOther != null)
{
var diagonal = diagonalOther.Data;
var d = Math.Min(RowCount, other.ColumnCount);
if (d < other.ColumnCount)
{
result.ClearSubMatrix(0, ColumnCount, RowCount, other.ColumnCount - RowCount);
}
int index = 0;
for (int i = 0; i < ColumnCount; i++)
{
for (int j = 0; j < d; j++)
{
result.At(i, j, _values[index]*diagonal[j]);
index++;
}
index += (RowCount - d);
}
return;
}
base.DoTransposeThisAndMultiply(other, result);
} }
/// <summary> /// <summary>

32
src/Numerics/LinearAlgebra/Complex32/DenseMatrix.cs

@ -762,12 +762,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32
{ {
var denseOther = other as DenseMatrix; var denseOther = other as DenseMatrix;
var denseResult = result as DenseMatrix; var denseResult = result as DenseMatrix;
if (denseOther != null && denseResult != null)
if (denseOther == null || denseResult == null)
{
base.DoTransposeThisAndMultiply(other, result);
}
else
{ {
Control.LinearAlgebraProvider.MatrixMultiplyWithUpdate( Control.LinearAlgebraProvider.MatrixMultiplyWithUpdate(
Providers.LinearAlgebra.Transpose.Transpose, Providers.LinearAlgebra.Transpose.Transpose,
@ -781,7 +776,32 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32
denseOther._columnCount, denseOther._columnCount,
0.0f, 0.0f,
denseResult._values); denseResult._values);
return;
} }
var diagonalOther = other.Storage as DiagonalMatrixStorage<Complex32>;
if (diagonalOther != null)
{
var diagonal = diagonalOther.Data;
var d = Math.Min(RowCount, other.ColumnCount);
if (d < other.ColumnCount)
{
result.ClearSubMatrix(0, ColumnCount, RowCount, other.ColumnCount - RowCount);
}
int index = 0;
for (int i = 0; i < ColumnCount; i++)
{
for (int j = 0; j < d; j++)
{
result.At(i, j, _values[index]*diagonal[j]);
index++;
}
index += (RowCount - d);
}
return;
}
base.DoTransposeThisAndMultiply(other, result);
} }
/// <summary> /// <summary>

32
src/Numerics/LinearAlgebra/Double/DenseMatrix.cs

@ -742,12 +742,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
{ {
var denseOther = other as DenseMatrix; var denseOther = other as DenseMatrix;
var denseResult = result as DenseMatrix; var denseResult = result as DenseMatrix;
if (denseOther != null && denseResult != null)
if (denseOther == null || denseResult == null)
{
base.DoTransposeThisAndMultiply(other, result);
}
else
{ {
Control.LinearAlgebraProvider.MatrixMultiplyWithUpdate( Control.LinearAlgebraProvider.MatrixMultiplyWithUpdate(
Providers.LinearAlgebra.Transpose.Transpose, Providers.LinearAlgebra.Transpose.Transpose,
@ -761,7 +756,32 @@ namespace MathNet.Numerics.LinearAlgebra.Double
denseOther._columnCount, denseOther._columnCount,
0.0, 0.0,
denseResult._values); denseResult._values);
return;
} }
var diagonalOther = other.Storage as DiagonalMatrixStorage<double>;
if (diagonalOther != null)
{
var diagonal = diagonalOther.Data;
var d = Math.Min(RowCount, other.ColumnCount);
if (d < other.ColumnCount)
{
result.ClearSubMatrix(0, ColumnCount, RowCount, other.ColumnCount - RowCount);
}
int index = 0;
for (int i = 0; i < ColumnCount; i++)
{
for (int j = 0; j < d; j++)
{
result.At(i, j, _values[index]*diagonal[j]);
index++;
}
index += (RowCount - d);
}
return;
}
base.DoTransposeThisAndMultiply(other, result);
} }
/// <summary> /// <summary>

32
src/Numerics/LinearAlgebra/Single/DenseMatrix.cs

@ -742,12 +742,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single
{ {
var denseOther = other as DenseMatrix; var denseOther = other as DenseMatrix;
var denseResult = result as DenseMatrix; var denseResult = result as DenseMatrix;
if (denseOther != null && denseResult != null)
if (denseOther == null || denseResult == null)
{
base.DoTransposeThisAndMultiply(other, result);
}
else
{ {
Control.LinearAlgebraProvider.MatrixMultiplyWithUpdate( Control.LinearAlgebraProvider.MatrixMultiplyWithUpdate(
Providers.LinearAlgebra.Transpose.Transpose, Providers.LinearAlgebra.Transpose.Transpose,
@ -761,7 +756,32 @@ namespace MathNet.Numerics.LinearAlgebra.Single
denseOther._columnCount, denseOther._columnCount,
0.0f, 0.0f,
denseResult._values); denseResult._values);
return;
} }
var diagonalOther = other.Storage as DiagonalMatrixStorage<float>;
if (diagonalOther != null)
{
var diagonal = diagonalOther.Data;
var d = Math.Min(RowCount, other.ColumnCount);
if (d < other.ColumnCount)
{
result.ClearSubMatrix(0, ColumnCount, RowCount, other.ColumnCount - RowCount);
}
int index = 0;
for (int i = 0; i < ColumnCount; i++)
{
for (int j = 0; j < d; j++)
{
result.At(i, j, _values[index]*diagonal[j]);
index++;
}
index += (RowCount - d);
}
return;
}
base.DoTransposeThisAndMultiply(other, result);
} }
/// <summary> /// <summary>

19
src/UnitTests/LinearAlgebraTests/Complex/DiagonalMatrixTests.cs

@ -390,7 +390,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex
public void DenseDiagonalMatrixMultiply() public void DenseDiagonalMatrixMultiply()
{ {
var dist = new ContinuousUniform(-1.0, 1.0, new MersenneTwister()); var dist = new ContinuousUniform(-1.0, 1.0, new MersenneTwister());
Assert.IsInstanceOf<DiagonalMatrix>(Matrix<Complex>.Build.DiagonalIdentity(3, 3)); Assert.IsInstanceOf<DiagonalMatrix>(Matrix<Complex>.Build.DiagonalIdentity(3, 3));
var tall = Matrix<Complex>.Build.Random(8, 3, dist); var tall = Matrix<Complex>.Build.Random(8, 3, dist);
@ -408,7 +407,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex
public void DenseDiagonalMatrixTransposeAndMultiply() public void DenseDiagonalMatrixTransposeAndMultiply()
{ {
var dist = new ContinuousUniform(-1.0, 1.0, new MersenneTwister()); var dist = new ContinuousUniform(-1.0, 1.0, new MersenneTwister());
Assert.IsInstanceOf<DiagonalMatrix>(Matrix<Complex>.Build.DiagonalIdentity(3, 3)); Assert.IsInstanceOf<DiagonalMatrix>(Matrix<Complex>.Build.DiagonalIdentity(3, 3));
var tall = Matrix<Complex>.Build.Random(8, 3, dist); var tall = Matrix<Complex>.Build.Random(8, 3, dist);
@ -421,5 +419,22 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex
Assert.IsTrue(wide.TransposeAndMultiply(Matrix<Complex>.Build.Diagonal(10, 8, 2d)).Equals(wide.Multiply(2d).Append(Matrix<Complex>.Build.Dense(3, 2)))); Assert.IsTrue(wide.TransposeAndMultiply(Matrix<Complex>.Build.Diagonal(10, 8, 2d)).Equals(wide.Multiply(2d).Append(Matrix<Complex>.Build.Dense(3, 2))));
Assert.IsTrue(wide.TransposeAndMultiply(Matrix<Complex>.Build.Diagonal(2, 8, 2d)).Equals(wide.Multiply(2d).SubMatrix(0, 3, 0, 2))); Assert.IsTrue(wide.TransposeAndMultiply(Matrix<Complex>.Build.Diagonal(2, 8, 2d)).Equals(wide.Multiply(2d).SubMatrix(0, 3, 0, 2)));
} }
[Test]
public void DenseDiagonalMatrixTransposeThisAndMultiply()
{
var dist = new ContinuousUniform(-1.0, 1.0, new MersenneTwister());
Assert.IsInstanceOf<DiagonalMatrix>(Matrix<Complex>.Build.DiagonalIdentity(3, 3));
var wide = Matrix<Complex>.Build.Random(3, 8, dist);
Assert.IsTrue(wide.TransposeThisAndMultiply(Matrix<Complex>.Build.DiagonalIdentity(3).Multiply(2d)).Equals(wide.Transpose().Multiply(2d)));
Assert.IsTrue(wide.TransposeThisAndMultiply(Matrix<Complex>.Build.Diagonal(3, 5, 2d)).Equals(wide.Transpose().Multiply(2d).Append(Matrix<Complex>.Build.Dense(8, 2))));
Assert.IsTrue(wide.TransposeThisAndMultiply(Matrix<Complex>.Build.Diagonal(3, 2, 2d)).Equals(wide.Transpose().Multiply(2d).SubMatrix(0, 8, 0, 2)));
var tall = Matrix<Complex>.Build.Random(8, 3, dist);
Assert.IsTrue(tall.TransposeThisAndMultiply(Matrix<Complex>.Build.DiagonalIdentity(8).Multiply(2d)).Equals(tall.Transpose().Multiply(2d)));
Assert.IsTrue(tall.TransposeThisAndMultiply(Matrix<Complex>.Build.Diagonal(8, 10, 2d)).Equals(tall.Transpose().Multiply(2d).Append(Matrix<Complex>.Build.Dense(3, 2))));
Assert.IsTrue(tall.TransposeThisAndMultiply(Matrix<Complex>.Build.Diagonal(8, 2, 2d)).Equals(tall.Transpose().Multiply(2d).SubMatrix(0, 3, 0, 2)));
}
} }
} }

19
src/UnitTests/LinearAlgebraTests/Complex32/DiagonalMatrixTests.cs

@ -386,7 +386,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32
public void DenseDiagonalMatrixMultiply() public void DenseDiagonalMatrixMultiply()
{ {
var dist = new ContinuousUniform(-1.0, 1.0, new MersenneTwister()); var dist = new ContinuousUniform(-1.0, 1.0, new MersenneTwister());
Assert.IsInstanceOf<DiagonalMatrix>(Matrix<Complex32>.Build.DiagonalIdentity(3, 3)); Assert.IsInstanceOf<DiagonalMatrix>(Matrix<Complex32>.Build.DiagonalIdentity(3, 3));
var tall = Matrix<Complex32>.Build.Random(8, 3, dist); var tall = Matrix<Complex32>.Build.Random(8, 3, dist);
@ -404,7 +403,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32
public void DenseDiagonalMatrixTransposeAndMultiply() public void DenseDiagonalMatrixTransposeAndMultiply()
{ {
var dist = new ContinuousUniform(-1.0, 1.0, new MersenneTwister()); var dist = new ContinuousUniform(-1.0, 1.0, new MersenneTwister());
Assert.IsInstanceOf<DiagonalMatrix>(Matrix<Complex32>.Build.DiagonalIdentity(3, 3)); Assert.IsInstanceOf<DiagonalMatrix>(Matrix<Complex32>.Build.DiagonalIdentity(3, 3));
var tall = Matrix<Complex32>.Build.Random(8, 3, dist); var tall = Matrix<Complex32>.Build.Random(8, 3, dist);
@ -417,5 +415,22 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32
Assert.IsTrue(wide.TransposeAndMultiply(Matrix<Complex32>.Build.Diagonal(10, 8, 2f)).Equals(wide.Multiply(2f).Append(Matrix<Complex32>.Build.Dense(3, 2)))); Assert.IsTrue(wide.TransposeAndMultiply(Matrix<Complex32>.Build.Diagonal(10, 8, 2f)).Equals(wide.Multiply(2f).Append(Matrix<Complex32>.Build.Dense(3, 2))));
Assert.IsTrue(wide.TransposeAndMultiply(Matrix<Complex32>.Build.Diagonal(2, 8, 2f)).Equals(wide.Multiply(2f).SubMatrix(0, 3, 0, 2))); Assert.IsTrue(wide.TransposeAndMultiply(Matrix<Complex32>.Build.Diagonal(2, 8, 2f)).Equals(wide.Multiply(2f).SubMatrix(0, 3, 0, 2)));
} }
[Test]
public void DenseDiagonalMatrixTransposeThisAndMultiply()
{
var dist = new ContinuousUniform(-1.0, 1.0, new MersenneTwister());
Assert.IsInstanceOf<DiagonalMatrix>(Matrix<Complex32>.Build.DiagonalIdentity(3, 3));
var wide = Matrix<Complex32>.Build.Random(3, 8, dist);
Assert.IsTrue(wide.TransposeThisAndMultiply(Matrix<Complex32>.Build.DiagonalIdentity(3).Multiply(2f)).Equals(wide.Transpose().Multiply(2f)));
Assert.IsTrue(wide.TransposeThisAndMultiply(Matrix<Complex32>.Build.Diagonal(3, 5, 2f)).Equals(wide.Transpose().Multiply(2f).Append(Matrix<Complex32>.Build.Dense(8, 2))));
Assert.IsTrue(wide.TransposeThisAndMultiply(Matrix<Complex32>.Build.Diagonal(3, 2, 2f)).Equals(wide.Transpose().Multiply(2f).SubMatrix(0, 8, 0, 2)));
var tall = Matrix<Complex32>.Build.Random(8, 3, dist);
Assert.IsTrue(tall.TransposeThisAndMultiply(Matrix<Complex32>.Build.DiagonalIdentity(8).Multiply(2f)).Equals(tall.Transpose().Multiply(2f)));
Assert.IsTrue(tall.TransposeThisAndMultiply(Matrix<Complex32>.Build.Diagonal(8, 10, 2f)).Equals(tall.Transpose().Multiply(2f).Append(Matrix<Complex32>.Build.Dense(3, 2))));
Assert.IsTrue(tall.TransposeThisAndMultiply(Matrix<Complex32>.Build.Diagonal(8, 2, 2f)).Equals(tall.Transpose().Multiply(2f).SubMatrix(0, 3, 0, 2)));
}
} }
} }

19
src/UnitTests/LinearAlgebraTests/Double/DiagonalMatrixTests.cs

@ -417,7 +417,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
public void DenseDiagonalMatrixMultiply() public void DenseDiagonalMatrixMultiply()
{ {
var dist = new ContinuousUniform(-1.0, 1.0, new MersenneTwister()); var dist = new ContinuousUniform(-1.0, 1.0, new MersenneTwister());
Assert.IsInstanceOf<DiagonalMatrix>(Matrix<double>.Build.DiagonalIdentity(3, 3)); Assert.IsInstanceOf<DiagonalMatrix>(Matrix<double>.Build.DiagonalIdentity(3, 3));
var tall = Matrix<double>.Build.Random(8, 3, dist); var tall = Matrix<double>.Build.Random(8, 3, dist);
@ -435,7 +434,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
public void DenseDiagonalMatrixTransposeAndMultiply() public void DenseDiagonalMatrixTransposeAndMultiply()
{ {
var dist = new ContinuousUniform(-1.0, 1.0, new MersenneTwister()); var dist = new ContinuousUniform(-1.0, 1.0, new MersenneTwister());
Assert.IsInstanceOf<DiagonalMatrix>(Matrix<double>.Build.DiagonalIdentity(3, 3)); Assert.IsInstanceOf<DiagonalMatrix>(Matrix<double>.Build.DiagonalIdentity(3, 3));
var tall = Matrix<double>.Build.Random(8, 3, dist); var tall = Matrix<double>.Build.Random(8, 3, dist);
@ -448,5 +446,22 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
Assert.IsTrue(wide.TransposeAndMultiply(Matrix<double>.Build.Diagonal(10, 8, 2d)).Equals(wide.Multiply(2d).Append(Matrix<double>.Build.Dense(3, 2)))); Assert.IsTrue(wide.TransposeAndMultiply(Matrix<double>.Build.Diagonal(10, 8, 2d)).Equals(wide.Multiply(2d).Append(Matrix<double>.Build.Dense(3, 2))));
Assert.IsTrue(wide.TransposeAndMultiply(Matrix<double>.Build.Diagonal(2, 8, 2d)).Equals(wide.Multiply(2d).SubMatrix(0, 3, 0, 2))); Assert.IsTrue(wide.TransposeAndMultiply(Matrix<double>.Build.Diagonal(2, 8, 2d)).Equals(wide.Multiply(2d).SubMatrix(0, 3, 0, 2)));
} }
[Test]
public void DenseDiagonalMatrixTransposeThisAndMultiply()
{
var dist = new ContinuousUniform(-1.0, 1.0, new MersenneTwister());
Assert.IsInstanceOf<DiagonalMatrix>(Matrix<double>.Build.DiagonalIdentity(3, 3));
var wide = Matrix<double>.Build.Random(3, 8, dist);
Assert.IsTrue(wide.TransposeThisAndMultiply(Matrix<double>.Build.DiagonalIdentity(3).Multiply(2d)).Equals(wide.Transpose().Multiply(2d)));
Assert.IsTrue(wide.TransposeThisAndMultiply(Matrix<double>.Build.Diagonal(3, 5, 2d)).Equals(wide.Transpose().Multiply(2d).Append(Matrix<double>.Build.Dense(8, 2))));
Assert.IsTrue(wide.TransposeThisAndMultiply(Matrix<double>.Build.Diagonal(3, 2, 2d)).Equals(wide.Transpose().Multiply(2d).SubMatrix(0, 8, 0, 2)));
var tall = Matrix<double>.Build.Random(8, 3, dist);
Assert.IsTrue(tall.TransposeThisAndMultiply(Matrix<double>.Build.DiagonalIdentity(8).Multiply(2d)).Equals(tall.Transpose().Multiply(2d)));
Assert.IsTrue(tall.TransposeThisAndMultiply(Matrix<double>.Build.Diagonal(8, 10, 2d)).Equals(tall.Transpose().Multiply(2d).Append(Matrix<double>.Build.Dense(3, 2))));
Assert.IsTrue(tall.TransposeThisAndMultiply(Matrix<double>.Build.Diagonal(8, 2, 2d)).Equals(tall.Transpose().Multiply(2d).SubMatrix(0, 3, 0, 2)));
}
} }
} }

19
src/UnitTests/LinearAlgebraTests/Single/DiagonalMatrixTests.cs

@ -384,7 +384,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single
public void DenseDiagonalMatrixMultiply() public void DenseDiagonalMatrixMultiply()
{ {
var dist = new ContinuousUniform(-1.0, 1.0, new MersenneTwister()); var dist = new ContinuousUniform(-1.0, 1.0, new MersenneTwister());
Assert.IsInstanceOf<DiagonalMatrix>(Matrix<float>.Build.DiagonalIdentity(3, 3)); Assert.IsInstanceOf<DiagonalMatrix>(Matrix<float>.Build.DiagonalIdentity(3, 3));
var tall = Matrix<float>.Build.Random(8, 3, dist); var tall = Matrix<float>.Build.Random(8, 3, dist);
@ -402,7 +401,6 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single
public void DenseDiagonalMatrixTransposeAndMultiply() public void DenseDiagonalMatrixTransposeAndMultiply()
{ {
var dist = new ContinuousUniform(-1.0, 1.0, new MersenneTwister()); var dist = new ContinuousUniform(-1.0, 1.0, new MersenneTwister());
Assert.IsInstanceOf<DiagonalMatrix>(Matrix<float>.Build.DiagonalIdentity(3, 3)); Assert.IsInstanceOf<DiagonalMatrix>(Matrix<float>.Build.DiagonalIdentity(3, 3));
var tall = Matrix<float>.Build.Random(8, 3, dist); var tall = Matrix<float>.Build.Random(8, 3, dist);
@ -415,5 +413,22 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single
Assert.IsTrue(wide.TransposeAndMultiply(Matrix<float>.Build.Diagonal(10, 8, 2f)).Equals(wide.Multiply(2f).Append(Matrix<float>.Build.Dense(3, 2)))); Assert.IsTrue(wide.TransposeAndMultiply(Matrix<float>.Build.Diagonal(10, 8, 2f)).Equals(wide.Multiply(2f).Append(Matrix<float>.Build.Dense(3, 2))));
Assert.IsTrue(wide.TransposeAndMultiply(Matrix<float>.Build.Diagonal(2, 8, 2f)).Equals(wide.Multiply(2f).SubMatrix(0, 3, 0, 2))); Assert.IsTrue(wide.TransposeAndMultiply(Matrix<float>.Build.Diagonal(2, 8, 2f)).Equals(wide.Multiply(2f).SubMatrix(0, 3, 0, 2)));
} }
[Test]
public void DenseDiagonalMatrixTransposeThisAndMultiply()
{
var dist = new ContinuousUniform(-1.0, 1.0, new MersenneTwister());
Assert.IsInstanceOf<DiagonalMatrix>(Matrix<float>.Build.DiagonalIdentity(3, 3));
var wide = Matrix<float>.Build.Random(3, 8, dist);
Assert.IsTrue(wide.TransposeThisAndMultiply(Matrix<float>.Build.DiagonalIdentity(3).Multiply(2f)).Equals(wide.Transpose().Multiply(2f)));
Assert.IsTrue(wide.TransposeThisAndMultiply(Matrix<float>.Build.Diagonal(3, 5, 2f)).Equals(wide.Transpose().Multiply(2f).Append(Matrix<float>.Build.Dense(8, 2))));
Assert.IsTrue(wide.TransposeThisAndMultiply(Matrix<float>.Build.Diagonal(3, 2, 2f)).Equals(wide.Transpose().Multiply(2f).SubMatrix(0, 8, 0, 2)));
var tall = Matrix<float>.Build.Random(8, 3, dist);
Assert.IsTrue(tall.TransposeThisAndMultiply(Matrix<float>.Build.DiagonalIdentity(8).Multiply(2f)).Equals(tall.Transpose().Multiply(2f)));
Assert.IsTrue(tall.TransposeThisAndMultiply(Matrix<float>.Build.Diagonal(8, 10, 2f)).Equals(tall.Transpose().Multiply(2f).Append(Matrix<float>.Build.Dense(3, 2))));
Assert.IsTrue(tall.TransposeThisAndMultiply(Matrix<float>.Build.Diagonal(8, 2, 2f)).Equals(tall.Transpose().Multiply(2f).SubMatrix(0, 3, 0, 2)));
}
} }
} }

Loading…
Cancel
Save