diff --git a/src/Numerics/LinearAlgebra/Complex/DenseVector.cs b/src/Numerics/LinearAlgebra/Complex/DenseVector.cs index c4416784..976a1844 100644 --- a/src/Numerics/LinearAlgebra/Complex/DenseVector.cs +++ b/src/Numerics/LinearAlgebra/Complex/DenseVector.cs @@ -271,15 +271,16 @@ namespace MathNet.Numerics.LinearAlgebra.Complex /// The vector to store the result of the addition. protected override void DoAdd(Vector other, Vector result) { - var rdense = result as DenseVector; - var odense = other as DenseVector; - if (rdense != null && odense != null) + var otherDense = other as DenseVector; + var resultDense = result as DenseVector; + + if (otherDense == null || resultDense == null) { - Control.LinearAlgebraProvider.AddVectorToScaledVector(_values, Complex.One, odense.Values, rdense.Values); + base.DoAdd(other, result); } else { - base.DoAdd(other, result); + Control.LinearAlgebraProvider.AddArrays(_values, otherDense._values, resultDense._values); } } @@ -350,21 +351,22 @@ namespace MathNet.Numerics.LinearAlgebra.Complex } /// - /// Subtracts another vector to this vector and stores the result into the result vector. + /// Subtracts another vector from this vector and stores the result into the result vector. /// /// The vector to subtract from this one. /// The vector to store the result of the subtraction. protected override void DoSubtract(Vector other, Vector result) { - var rdense = result as DenseVector; - var odense = other as DenseVector; - if (rdense != null && odense != null) + var otherDense = other as DenseVector; + var resultDense = result as DenseVector; + + if (otherDense == null || resultDense == null) { - Control.LinearAlgebraProvider.AddVectorToScaledVector(_values, -1.0, odense.Values, rdense.Values); + base.DoSubtract(other, result); } else { - base.DoSubtract(other, result); + Control.LinearAlgebraProvider.SubtractArrays(_values, otherDense._values, resultDense._values); } } @@ -638,17 +640,16 @@ namespace MathNet.Numerics.LinearAlgebra.Complex /// The vector to store the result of the pointwise division. protected override void DoPointwiseMultiply(Vector other, Vector result) { - var dense = result as DenseVector; - if (dense == null) + var denseOther = other as DenseVector; + var denseResult = result as DenseVector; + + if (denseOther == null || denseResult == null) { base.DoPointwiseMultiply(other, result); } else { - CommonParallel.For( - 0, - _values.Length, - index => dense._values[index] = _values[index] * other[index]); + Control.LinearAlgebraProvider.PointWiseMultiplyArrays(_values, denseOther._values, denseResult._values); } } @@ -660,17 +661,16 @@ namespace MathNet.Numerics.LinearAlgebra.Complex /// protected override void DoPointwiseDivide(Vector other, Vector result) { - var dense = result as DenseVector; - if (dense == null) + var denseOther = other as DenseVector; + var denseResult = result as DenseVector; + + if (denseOther == null || denseResult == null) { base.DoPointwiseDivide(other, result); } else { - CommonParallel.For( - 0, - _values.Length, - index => dense._values[index] = _values[index] / other[index]); + Control.LinearAlgebraProvider.PointWiseDivideArrays(_values, denseOther._values, denseResult._values); } } diff --git a/src/Numerics/LinearAlgebra/Complex32/DenseVector.cs b/src/Numerics/LinearAlgebra/Complex32/DenseVector.cs index ec2bb8cf..f5c388c9 100644 --- a/src/Numerics/LinearAlgebra/Complex32/DenseVector.cs +++ b/src/Numerics/LinearAlgebra/Complex32/DenseVector.cs @@ -271,15 +271,16 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32 /// The vector to store the result of the addition. protected override void DoAdd(Vector other, Vector result) { - var rdense = result as DenseVector; - var odense = other as DenseVector; - if (rdense != null && odense != null) + var otherDense = other as DenseVector; + var resultDense = result as DenseVector; + + if (otherDense == null || resultDense == null) { - Control.LinearAlgebraProvider.AddVectorToScaledVector(_values, Complex32.One, odense.Values, rdense.Values); + base.DoAdd(other, result); } else { - base.DoAdd(other, result); + Control.LinearAlgebraProvider.AddArrays(_values, otherDense._values, resultDense._values); } } @@ -350,21 +351,22 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32 } /// - /// Subtracts another vector to this vector and stores the result into the result vector. + /// Subtracts another vector from this vector and stores the result into the result vector. /// /// The vector to subtract from this one. /// The vector to store the result of the subtraction. protected override void DoSubtract(Vector other, Vector result) { - var rdense = result as DenseVector; - var odense = other as DenseVector; - if (rdense != null && odense != null) + var otherDense = other as DenseVector; + var resultDense = result as DenseVector; + + if (otherDense == null || resultDense == null) { - Control.LinearAlgebraProvider.AddVectorToScaledVector(_values, -1.0f, odense.Values, rdense.Values); + base.DoSubtract(other, result); } else { - base.DoSubtract(other, result); + Control.LinearAlgebraProvider.SubtractArrays(_values, otherDense._values, resultDense._values); } } @@ -638,17 +640,16 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32 /// The vector to store the result of the pointwise division. protected override void DoPointwiseMultiply(Vector other, Vector result) { - var dense = result as DenseVector; - if (dense == null) + var denseOther = other as DenseVector; + var denseResult = result as DenseVector; + + if (denseOther == null || denseResult == null) { base.DoPointwiseMultiply(other, result); } else { - CommonParallel.For( - 0, - _values.Length, - index => dense._values[index] = _values[index] * other[index]); + Control.LinearAlgebraProvider.PointWiseMultiplyArrays(_values, denseOther._values, denseResult._values); } } @@ -660,17 +661,16 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32 /// protected override void DoPointwiseDivide(Vector other, Vector result) { - var dense = result as DenseVector; - if (dense == null) + var denseOther = other as DenseVector; + var denseResult = result as DenseVector; + + if (denseOther == null || denseResult == null) { base.DoPointwiseDivide(other, result); } else { - CommonParallel.For( - 0, - _values.Length, - index => dense._values[index] = _values[index] / other[index]); + Control.LinearAlgebraProvider.PointWiseDivideArrays(_values, denseOther._values, denseResult._values); } } diff --git a/src/Numerics/LinearAlgebra/Double/DenseVector.cs b/src/Numerics/LinearAlgebra/Double/DenseVector.cs index 68dc6b2f..66e91029 100644 --- a/src/Numerics/LinearAlgebra/Double/DenseVector.cs +++ b/src/Numerics/LinearAlgebra/Double/DenseVector.cs @@ -271,15 +271,16 @@ namespace MathNet.Numerics.LinearAlgebra.Double /// The vector to store the result of the addition. protected override void DoAdd(Vector other, Vector result) { - var rdense = result as DenseVector; - var odense = other as DenseVector; - if (rdense != null && odense != null) + var otherDense = other as DenseVector; + var resultDense = result as DenseVector; + + if (otherDense == null || resultDense == null) { - Control.LinearAlgebraProvider.AddVectorToScaledVector(_values, 1.0, odense.Values, rdense.Values); + base.DoAdd(other, result); } else { - base.DoAdd(other, result); + Control.LinearAlgebraProvider.AddArrays(_values, otherDense._values, resultDense._values); } } @@ -356,15 +357,16 @@ namespace MathNet.Numerics.LinearAlgebra.Double /// The vector to store the result of the subtraction. protected override void DoSubtract(Vector other, Vector result) { - var rdense = result as DenseVector; - var odense = other as DenseVector; - if (rdense != null && odense != null) + var otherDense = other as DenseVector; + var resultDense = result as DenseVector; + + if (otherDense == null || resultDense == null) { - Control.LinearAlgebraProvider.AddVectorToScaledVector(_values, -1.0, odense.Values, rdense.Values); + base.DoSubtract(other, result); } else { - base.DoSubtract(other, result); + Control.LinearAlgebraProvider.SubtractArrays(_values, otherDense._values, resultDense._values); } } @@ -719,17 +721,16 @@ namespace MathNet.Numerics.LinearAlgebra.Double /// The vector to store the result of the pointwise division. protected override void DoPointwiseMultiply(Vector other, Vector result) { - var dense = result as DenseVector; - if (dense == null) + var denseOther = other as DenseVector; + var denseResult = result as DenseVector; + + if (denseOther == null || denseResult == null) { base.DoPointwiseMultiply(other, result); } else { - CommonParallel.For( - 0, - _values.Length, - index => dense._values[index] = _values[index] * other[index]); + Control.LinearAlgebraProvider.PointWiseMultiplyArrays(_values, denseOther._values, denseResult._values); } } @@ -741,17 +742,16 @@ namespace MathNet.Numerics.LinearAlgebra.Double /// protected override void DoPointwiseDivide(Vector other, Vector result) { - var dense = result as DenseVector; - if (dense == null) + var denseOther = other as DenseVector; + var denseResult = result as DenseVector; + + if (denseOther == null || denseResult == null) { base.DoPointwiseDivide(other, result); } else { - CommonParallel.For( - 0, - _values.Length, - index => dense._values[index] = _values[index] / other[index]); + Control.LinearAlgebraProvider.PointWiseDivideArrays(_values, denseOther._values, denseResult._values); } } diff --git a/src/Numerics/LinearAlgebra/Single/DenseVector.cs b/src/Numerics/LinearAlgebra/Single/DenseVector.cs index bddb39e0..9ed5bd64 100644 --- a/src/Numerics/LinearAlgebra/Single/DenseVector.cs +++ b/src/Numerics/LinearAlgebra/Single/DenseVector.cs @@ -271,15 +271,16 @@ namespace MathNet.Numerics.LinearAlgebra.Single /// The vector to store the result of the addition. protected override void DoAdd(Vector other, Vector result) { - var rdense = result as DenseVector; - var odense = other as DenseVector; - if (rdense != null && odense != null) + var otherDense = other as DenseVector; + var resultDense = result as DenseVector; + + if (otherDense == null || resultDense == null) { - Control.LinearAlgebraProvider.AddVectorToScaledVector(_values, 1.0f, odense.Values, rdense.Values); + base.DoAdd(other, result); } else { - base.DoAdd(other, result); + Control.LinearAlgebraProvider.AddArrays(_values, otherDense._values, resultDense._values); } } @@ -350,21 +351,22 @@ namespace MathNet.Numerics.LinearAlgebra.Single } /// - /// Subtracts another vector to this vector and stores the result into the result vector. + /// Subtracts another vector from this vector and stores the result into the result vector. /// /// The vector to subtract from this one. /// The vector to store the result of the subtraction. protected override void DoSubtract(Vector other, Vector result) { - var rdense = result as DenseVector; - var odense = other as DenseVector; - if (rdense != null && odense != null) + var otherDense = other as DenseVector; + var resultDense = result as DenseVector; + + if (otherDense == null || resultDense == null) { - Control.LinearAlgebraProvider.AddVectorToScaledVector(_values, -1.0f, odense.Values, rdense.Values); + base.DoSubtract(other, result); } else { - base.DoSubtract(other, result); + Control.LinearAlgebraProvider.SubtractArrays(_values, otherDense._values, resultDense._values); } } @@ -719,17 +721,16 @@ namespace MathNet.Numerics.LinearAlgebra.Single /// The vector to store the result of the pointwise division. protected override void DoPointwiseMultiply(Vector other, Vector result) { - var dense = result as DenseVector; - if (dense == null) + var denseOther = other as DenseVector; + var denseResult = result as DenseVector; + + if (denseOther == null || denseResult == null) { base.DoPointwiseMultiply(other, result); } else { - CommonParallel.For( - 0, - _values.Length, - index => dense._values[index] = _values[index] * other[index]); + Control.LinearAlgebraProvider.PointWiseMultiplyArrays(_values, denseOther._values, denseResult._values); } } @@ -741,17 +742,16 @@ namespace MathNet.Numerics.LinearAlgebra.Single /// protected override void DoPointwiseDivide(Vector other, Vector result) { - var dense = result as DenseVector; - if (dense == null) + var denseOther = other as DenseVector; + var denseResult = result as DenseVector; + + if (denseOther == null || denseResult == null) { base.DoPointwiseDivide(other, result); } else { - CommonParallel.For( - 0, - _values.Length, - index => dense._values[index] = _values[index] / other[index]); + Control.LinearAlgebraProvider.PointWiseDivideArrays(_values, denseOther._values, denseResult._values); } }