diff --git a/src/FSharp/LinearAlgebra.Vector.fs b/src/FSharp/LinearAlgebra.Vector.fs index 93f0ff18..9a6be296 100644 --- a/src/FSharp/LinearAlgebra.Vector.fs +++ b/src/FSharp/LinearAlgebra.Vector.fs @@ -200,8 +200,8 @@ module Vector = } /// Creates a new vector and inserts the given value at the given index. - let inline insert index value (v: #Vector<_>) = - let newV = v.CreateVector(v.Count + 1) + let inline insert index value (v: #Vector<'T>) = + let newV = Vector<'T>.Build.SameAs(v, v.Count + 1) v.CopySubVectorTo(newV, 0, 0, index) v.CopySubVectorTo(newV, index, index+1, v.Count - index) newV.At(index, value) diff --git a/src/Numerics/LinearAlgebra/Complex/SparseVector.cs b/src/Numerics/LinearAlgebra/Complex/SparseVector.cs index 48e02636..b75cdbda 100644 --- a/src/Numerics/LinearAlgebra/Complex/SparseVector.cs +++ b/src/Numerics/LinearAlgebra/Complex/SparseVector.cs @@ -141,7 +141,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex { if (ReferenceEquals(this, result)) { - var tmp = CreateVector(Count); + var tmp = Build.SameAs(this); DoConjugate(tmp); tmp.CopyTo(result); } diff --git a/src/Numerics/LinearAlgebra/Complex32/SparseVector.cs b/src/Numerics/LinearAlgebra/Complex32/SparseVector.cs index 86bc894f..2f912994 100644 --- a/src/Numerics/LinearAlgebra/Complex32/SparseVector.cs +++ b/src/Numerics/LinearAlgebra/Complex32/SparseVector.cs @@ -136,7 +136,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32 { if (ReferenceEquals(this, result)) { - var tmp = CreateVector(Count); + var tmp = Build.SameAs(this); DoConjugate(tmp); tmp.CopyTo(result); } diff --git a/src/Numerics/LinearAlgebra/Matrix.Arithmetic.cs b/src/Numerics/LinearAlgebra/Matrix.Arithmetic.cs index 5a997cdf..7d4f31a2 100644 --- a/src/Numerics/LinearAlgebra/Matrix.Arithmetic.cs +++ b/src/Numerics/LinearAlgebra/Matrix.Arithmetic.cs @@ -557,7 +557,7 @@ namespace MathNet.Numerics.LinearAlgebra if (ReferenceEquals(rightSide, result)) { - var tmp = result.CreateVector(result.Count); + var tmp = Vector.Build.SameAs(result); DoMultiply(rightSide, tmp); tmp.CopyTo(result); } @@ -606,7 +606,7 @@ namespace MathNet.Numerics.LinearAlgebra if (ReferenceEquals(leftSide, result)) { - var tmp = result.CreateVector(result.Count); + var tmp = Vector.Build.SameAs(result); DoLeftMultiply(leftSide, tmp); tmp.CopyTo(result); } @@ -753,7 +753,7 @@ namespace MathNet.Numerics.LinearAlgebra if (ReferenceEquals(rightSide, result)) { - var tmp = result.CreateVector(result.Count); + var tmp = Vector.Build.SameAs(result); DoTransposeThisAndMultiply(rightSide, tmp); tmp.CopyTo(result); } diff --git a/src/Numerics/LinearAlgebra/Vector.Arithmetic.cs b/src/Numerics/LinearAlgebra/Vector.Arithmetic.cs index 696355c7..53f6859a 100644 --- a/src/Numerics/LinearAlgebra/Vector.Arithmetic.cs +++ b/src/Numerics/LinearAlgebra/Vector.Arithmetic.cs @@ -178,7 +178,7 @@ namespace MathNet.Numerics.LinearAlgebra return Clone(); } - var result = CreateVector(Count); + var result = Build.SameAs(this); DoAdd(scalar, result); return result; } @@ -218,7 +218,7 @@ namespace MathNet.Numerics.LinearAlgebra throw new ArgumentException(Resources.ArgumentVectorsSameLength, "other"); } - var result = CreateVector(Count); + var result = Build.SameAs(this); DoAdd(other, result); return result; } @@ -252,7 +252,7 @@ namespace MathNet.Numerics.LinearAlgebra return Clone(); } - var result = CreateVector(Count); + var result = Build.SameAs(this); DoSubtract(scalar, result); return result; } @@ -286,7 +286,7 @@ namespace MathNet.Numerics.LinearAlgebra /// A new vector containing the subtraction of the scalar and this vector. public Vector SubtractFrom(T scalar) { - var result = CreateVector(Count); + var result = Build.SameAs(this); DoSubtractFrom(scalar, result); return result; } @@ -314,7 +314,7 @@ namespace MathNet.Numerics.LinearAlgebra /// Added as an alternative to the unary negation operator. public Vector Negate() { - var retrunVector = CreateVector(Count); + var retrunVector = Build.SameAs(this); DoNegate(retrunVector); return retrunVector; } @@ -346,7 +346,7 @@ namespace MathNet.Numerics.LinearAlgebra throw new ArgumentException(Resources.ArgumentVectorsSameLength, "other"); } - var result = CreateVector(Count); + var result = Build.SameAs(this); DoSubtract(other, result); return result; } @@ -374,7 +374,7 @@ namespace MathNet.Numerics.LinearAlgebra /// Conjugated vector public Vector Conjugate() { - var retrunVector = CreateVector(Count); + var retrunVector = Build.SameAs(this); DoConjugate(retrunVector); return retrunVector; } @@ -407,10 +407,10 @@ namespace MathNet.Numerics.LinearAlgebra if (scalar.Equals(Zero)) { - return CreateVector(Count); + return Build.SameAs(this); } - var result = CreateVector(Count); + var result = Build.SameAs(this); DoMultiply(scalar, result); return result; } @@ -484,7 +484,7 @@ namespace MathNet.Numerics.LinearAlgebra return Clone(); } - var result = CreateVector(Count); + var result = Build.SameAs(this); DoDivide(scalar, result); return result; } @@ -518,7 +518,7 @@ namespace MathNet.Numerics.LinearAlgebra /// A new vector that is the division of the vector and the scalar. public Vector DevideByThis(T scalar) { - var result = CreateVector(Count); + var result = Build.SameAs(this); DoDivideByThis(scalar, result); return result; } @@ -546,7 +546,7 @@ namespace MathNet.Numerics.LinearAlgebra /// A vector containing the result. public Vector Modulus(T divisor) { - var result = CreateVector(Count); + var result = Build.SameAs(this); DoModulus(divisor, result); return result; } @@ -573,7 +573,7 @@ namespace MathNet.Numerics.LinearAlgebra /// A vector containing the result. public Vector ModulusByThis(T dividend) { - var result = CreateVector(Count); + var result = Build.SameAs(this); DoModulusByThis(dividend, result); return result; } @@ -606,7 +606,7 @@ namespace MathNet.Numerics.LinearAlgebra throw new ArgumentException(Resources.ArgumentVectorsSameLength, "other"); } - var result = CreateVector(Count); + var result = Build.SameAs(this); DoPointwiseMultiply(other, result); return result; } @@ -646,7 +646,7 @@ namespace MathNet.Numerics.LinearAlgebra throw new ArgumentException(Resources.ArgumentVectorsSameLength, "divisor"); } - var result = CreateVector(Count); + var result = Build.SameAs(this); DoPointwiseDivide(divisor, result); return result; } @@ -686,7 +686,7 @@ namespace MathNet.Numerics.LinearAlgebra throw new ArgumentException(Resources.ArgumentVectorsSameLength, "divisor"); } - var result = CreateVector(Count); + var result = Build.SameAs(this); DoPointwiseModulus(divisor, result); return result; } @@ -721,8 +721,7 @@ namespace MathNet.Numerics.LinearAlgebra /// Matrix M[i,j] = u[i]*v[j] public static Matrix OuterProduct(Vector u, Vector v) { - var matrix = u.CreateMatrix(u.Count, v.Count); - + var matrix = Matrix.Build.SameAs(u, u.Count, v.Count); for (var i = 0; i < u.Count; i++) { matrix.SetRow(i, v.Multiply(u.At(i))); diff --git a/src/Numerics/LinearAlgebra/Vector.cs b/src/Numerics/LinearAlgebra/Vector.cs index f4b5b8de..ba8199b1 100644 --- a/src/Numerics/LinearAlgebra/Vector.cs +++ b/src/Numerics/LinearAlgebra/Vector.cs @@ -132,38 +132,13 @@ namespace MathNet.Numerics.LinearAlgebra Storage.Clear(index, count); } - /// - /// Create a matrix of the same kind with the provided number of rows and columns. - /// - /// The number of rows. - /// The number of columns. - /// Creates a matrix of the same matrix type as the current matrix. - public Matrix CreateMatrix(int rows, int columns) - { - return Storage.IsDense - ? Matrix.Build.Dense(rows, columns) - : Matrix.Build.Sparse(rows, columns); - } - - /// - /// Create a vector of the same kind with the provided dimension. - /// - /// The size of the vector. - /// Creates a vector of the same type as the current matrix. - public Vector CreateVector(int size) - { - return Storage.IsDense - ? Build.Dense(size) - : Build.Sparse(size); - } - /// /// Returns a deep-copy clone of the vector. /// /// A deep-copy clone of the vector. public Vector Clone() { - var result = CreateVector(Count); + var result = Build.SameAs(this); Storage.CopyToUnchecked(result.Storage, skipClearing: true); return result; } @@ -209,7 +184,7 @@ namespace MathNet.Numerics.LinearAlgebra /// If is not positive. public Vector SubVector(int index, int count) { - var target = CreateVector(count); + var target = Build.SameAs(this, count); Storage.CopySubVectorTo(target.Storage, index, 0, count, skipClearing: true); return target; } @@ -270,7 +245,7 @@ namespace MathNet.Numerics.LinearAlgebra /// public Matrix ToColumnMatrix() { - var result = CreateMatrix(Count, 1); + var result = Matrix.Build.SameAs(this, Count, 1); Storage.CopyToColumnUnchecked(result.Storage, 0, skipClearing: true); return result; } @@ -283,7 +258,7 @@ namespace MathNet.Numerics.LinearAlgebra /// public Matrix ToRowMatrix() { - var result = CreateMatrix(1, Count); + var result = Matrix.Build.SameAs(this, 1, Count); Storage.CopyToRowUnchecked(result.Storage, 0, skipClearing: true); return result; } diff --git a/src/UnitTests/LinearAlgebraTests/Complex/DenseVectorTests.cs b/src/UnitTests/LinearAlgebraTests/Complex/DenseVectorTests.cs index fe342e98..dd0015b1 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex/DenseVectorTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex/DenseVectorTests.cs @@ -159,7 +159,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex public void CanCreateDenseMatrix() { var vector = new DenseVector(3); - var matrix = vector.CreateMatrix(2, 3); + var matrix = Matrix.Build.SameAs(vector, 2, 3); + Assert.IsInstanceOf(matrix); Assert.AreEqual(2, matrix.RowCount); Assert.AreEqual(3, matrix.ColumnCount); } diff --git a/src/UnitTests/LinearAlgebraTests/Complex/SparseVectorTest.cs b/src/UnitTests/LinearAlgebraTests/Complex/SparseVectorTest.cs index 7b7d4d8a..312862e6 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex/SparseVectorTest.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex/SparseVectorTest.cs @@ -144,7 +144,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex public void CanCreateSparseMatrix() { var vector = new SparseVector(3); - var matrix = vector.CreateMatrix(2, 3); + var matrix = Matrix.Build.SameAs(vector, 2, 3); + Assert.IsInstanceOf(matrix); Assert.AreEqual(2, matrix.RowCount); Assert.AreEqual(3, matrix.ColumnCount); } diff --git a/src/UnitTests/LinearAlgebraTests/Complex/VectorTests.cs b/src/UnitTests/LinearAlgebraTests/Complex/VectorTests.cs index 264c018f..6b597e08 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex/VectorTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex/VectorTests.cs @@ -150,7 +150,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex public void CanCreateMatrix() { var vector = CreateVector(Data); - var matrix = vector.CreateMatrix(10, 10); + var matrix = Matrix.Build.SameAs(vector, 10, 10); Assert.AreEqual(matrix.RowCount, 10); Assert.AreEqual(matrix.ColumnCount, 10); } @@ -162,7 +162,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex public void CanCreateVector() { var expected = CreateVector(5); - var actual = expected.CreateVector(5); + var actual = Vector.Build.SameAs(expected, 5); Assert.AreEqual(expected.Storage.IsDense, actual.Storage.IsDense, "vectors are same kind."); } diff --git a/src/UnitTests/LinearAlgebraTests/Complex32/DenseVectorTests.cs b/src/UnitTests/LinearAlgebraTests/Complex32/DenseVectorTests.cs index 542aed16..e14f74d3 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex32/DenseVectorTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex32/DenseVectorTests.cs @@ -155,7 +155,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32 public void CanCreateDenseMatrix() { var vector = new DenseVector(3); - var matrix = vector.CreateMatrix(2, 3); + var matrix = Matrix.Build.SameAs(vector, 2, 3); + Assert.IsInstanceOf(matrix); Assert.AreEqual(2, matrix.RowCount); Assert.AreEqual(3, matrix.ColumnCount); } diff --git a/src/UnitTests/LinearAlgebraTests/Complex32/SparseVectorTest.cs b/src/UnitTests/LinearAlgebraTests/Complex32/SparseVectorTest.cs index ad20d01a..e20d7c75 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex32/SparseVectorTest.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex32/SparseVectorTest.cs @@ -140,7 +140,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32 public void CanCreateSparseMatrix() { var vector = new SparseVector(3); - var matrix = vector.CreateMatrix(2, 3); + var matrix = Matrix.Build.SameAs(vector, 2, 3); + Assert.IsInstanceOf(matrix); Assert.AreEqual(2, matrix.RowCount); Assert.AreEqual(3, matrix.ColumnCount); } diff --git a/src/UnitTests/LinearAlgebraTests/Complex32/VectorTests.cs b/src/UnitTests/LinearAlgebraTests/Complex32/VectorTests.cs index b47d5a49..d40a45ba 100644 --- a/src/UnitTests/LinearAlgebraTests/Complex32/VectorTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Complex32/VectorTests.cs @@ -146,7 +146,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32 public void CanCreateMatrix() { var vector = CreateVector(Data); - var matrix = vector.CreateMatrix(10, 10); + var matrix = Matrix.Build.SameAs(vector, 10, 10); Assert.AreEqual(matrix.RowCount, 10); Assert.AreEqual(matrix.ColumnCount, 10); } @@ -158,7 +158,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32 public void CanCreateVector() { var expected = CreateVector(5); - var actual = expected.CreateVector(5); + var actual = Vector.Build.SameAs(expected, 5); Assert.AreEqual(expected.Storage.IsDense, actual.Storage.IsDense, "vectors are same kind."); } diff --git a/src/UnitTests/LinearAlgebraTests/Double/DenseVectorTests.cs b/src/UnitTests/LinearAlgebraTests/Double/DenseVectorTests.cs index e9405253..daf0e5c4 100644 --- a/src/UnitTests/LinearAlgebraTests/Double/DenseVectorTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Double/DenseVectorTests.cs @@ -153,7 +153,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double public void CanCreateDenseMatrix() { var vector = new DenseVector(3); - var matrix = vector.CreateMatrix(2, 3); + var matrix = Matrix.Build.SameAs(vector, 2, 3); + Assert.IsInstanceOf(matrix); Assert.AreEqual(2, matrix.RowCount); Assert.AreEqual(3, matrix.ColumnCount); } diff --git a/src/UnitTests/LinearAlgebraTests/Double/SparseVectorTest.cs b/src/UnitTests/LinearAlgebraTests/Double/SparseVectorTest.cs index 1a4f9c45..65d2383d 100644 --- a/src/UnitTests/LinearAlgebraTests/Double/SparseVectorTest.cs +++ b/src/UnitTests/LinearAlgebraTests/Double/SparseVectorTest.cs @@ -138,7 +138,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double public void CanCreateSparseMatrix() { var vector = new SparseVector(3); - var matrix = vector.CreateMatrix(2, 3); + var matrix = Matrix.Build.SameAs(vector, 2, 3); + Assert.IsInstanceOf(matrix); Assert.AreEqual(2, matrix.RowCount); Assert.AreEqual(3, matrix.ColumnCount); } diff --git a/src/UnitTests/LinearAlgebraTests/Double/VectorTests.cs b/src/UnitTests/LinearAlgebraTests/Double/VectorTests.cs index 90b25062..716960b3 100644 --- a/src/UnitTests/LinearAlgebraTests/Double/VectorTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Double/VectorTests.cs @@ -143,7 +143,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double public void CanCreateMatrix() { var vector = CreateVector(Data); - var matrix = vector.CreateMatrix(10, 10); + var matrix = Matrix.Build.SameAs(vector, 10, 10); Assert.AreEqual(matrix.RowCount, 10); Assert.AreEqual(matrix.ColumnCount, 10); } @@ -155,7 +155,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double public void CanCreateVector() { var expected = CreateVector(5); - var actual = expected.CreateVector(5); + var actual = Vector.Build.SameAs(expected, 5); Assert.AreEqual(expected.Storage.IsDense, actual.Storage.IsDense, "vectors are same kind."); } diff --git a/src/UnitTests/LinearAlgebraTests/Single/DenseVectorTests.cs b/src/UnitTests/LinearAlgebraTests/Single/DenseVectorTests.cs index 9b407d36..9fd4d679 100644 --- a/src/UnitTests/LinearAlgebraTests/Single/DenseVectorTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Single/DenseVectorTests.cs @@ -153,7 +153,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single public void CanCreateDenseMatrix() { var vector = new DenseVector(3); - var matrix = vector.CreateMatrix(2, 3); + var matrix = Matrix.Build.SameAs(vector, 2, 3); + Assert.IsInstanceOf(matrix); Assert.AreEqual(2, matrix.RowCount); Assert.AreEqual(3, matrix.ColumnCount); } diff --git a/src/UnitTests/LinearAlgebraTests/Single/SparseVectorTest.cs b/src/UnitTests/LinearAlgebraTests/Single/SparseVectorTest.cs index f5d32321..aa9fcdc9 100644 --- a/src/UnitTests/LinearAlgebraTests/Single/SparseVectorTest.cs +++ b/src/UnitTests/LinearAlgebraTests/Single/SparseVectorTest.cs @@ -138,7 +138,8 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single public void CanCreateSparseMatrix() { var vector = new SparseVector(3); - var matrix = vector.CreateMatrix(2, 3); + var matrix = Matrix.Build.SameAs(vector, 2, 3); + Assert.IsInstanceOf(matrix); Assert.AreEqual(2, matrix.RowCount); Assert.AreEqual(3, matrix.ColumnCount); } diff --git a/src/UnitTests/LinearAlgebraTests/Single/VectorTests.cs b/src/UnitTests/LinearAlgebraTests/Single/VectorTests.cs index 0d4e64dd..88cd7ee4 100644 --- a/src/UnitTests/LinearAlgebraTests/Single/VectorTests.cs +++ b/src/UnitTests/LinearAlgebraTests/Single/VectorTests.cs @@ -143,7 +143,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single public void CanCreateMatrix() { var vector = CreateVector(Data); - var matrix = vector.CreateMatrix(10, 10); + var matrix = Matrix.Build.SameAs(vector, 10, 10); Assert.AreEqual(matrix.RowCount, 10); Assert.AreEqual(matrix.ColumnCount, 10); } @@ -155,7 +155,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single public void CanCreateVector() { var expected = CreateVector(5); - var actual = expected.CreateVector(5); + var actual = Vector.Build.SameAs(expected, 5); Assert.AreEqual(expected.Storage.IsDense, actual.Storage.IsDense, "vectors are same kind."); } diff --git a/src/UnitTests/LinearAlgebraTests/VectorArithmeticTheory.cs b/src/UnitTests/LinearAlgebraTests/VectorArithmeticTheory.cs index ea3d90de..0516af38 100644 --- a/src/UnitTests/LinearAlgebraTests/VectorArithmeticTheory.cs +++ b/src/UnitTests/LinearAlgebraTests/VectorArithmeticTheory.cs @@ -72,7 +72,7 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests var c = vector.Clone(); c.Subtract(vector, c); - Assert.That(c.Equals(vector.CreateVector(vector.Count))); + Assert.That(c.Equals(Vector.Build.SameAs(vector))); } [Theory, Timeout(200)]