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);
}
}