protected override void DoSubtract(Matrix<float> other, Matrix<float> result)
{
// dense + dense = dense
var denseOther = other.Storage as DenseColumnMajorMatrixStorage<float>;
var denseResult = result.Storage as DenseColumnMajorMatrixStorage<float>;
if (denseOther != null && denseResult != null)
{
Control.LinearAlgebraProvider.SubtractArrays(_values, denseOther.Data, denseResult.Data);
return;
}
// dense + diagonal = matrix
var diagonalOther = other.Storage as DiagonalMatrixStorage<float>;
if (diagonalOther != null)
{
CopyTo(result);
var diagonal = diagonalOther.Data;
for (int i = 0; i < diagonal.Length; i++)
{
result.At(i, i, result.At(i, i) - diagonal[i]);
}
return;
}
base.DoSubtract(other, result);
}