diff --git a/src/FSharp/LinearAlgebra.Vector.fs b/src/FSharp/LinearAlgebra.Vector.fs index 0c8ca266..93f0ff18 100644 --- a/src/FSharp/LinearAlgebra.Vector.fs +++ b/src/FSharp/LinearAlgebra.Vector.fs @@ -240,7 +240,7 @@ module DenseVector = let inline init (n: int) (f: int -> 'T) = Vector<'T>.Build.Dense(n, f) /// Create a vector from a float array (by copying - use raw instead if no copy is needed). - let inline ofArray (fl: 'T array) = Vector<'T>.Build.Dense(Array.copy fl) + let inline ofArray (fa: 'T array) = Vector<'T>.Build.Dense(Array.copy fa) /// Create a vector from a float list. let inline ofList (fl: 'T list) = Vector<'T>.Build.Dense(Array.ofList fl) @@ -278,7 +278,7 @@ module SparseVector = let inline init (n: int) (f: int -> 'T) = Vector<'T>.Build.Sparse(n, f) /// Create a sparse vector from a float array. - let inline ofArray (fl: 'T array) = Vector<'T>.Build.SparseOfEnumerable(fl :> seq<'T>) + let inline ofArray (fa: 'T array) = Vector<'T>.Build.SparseOfArray(fa) /// Create a sparse vector from a float list. let inline ofList (fl: 'T list) = Vector<'T>.Build.SparseOfEnumerable(Seq.ofList fl) diff --git a/src/Numerics/LinearAlgebra/Builder.cs b/src/Numerics/LinearAlgebra/Builder.cs index 6842a3ca..dbcf0d50 100644 --- a/src/Numerics/LinearAlgebra/Builder.cs +++ b/src/Numerics/LinearAlgebra/Builder.cs @@ -1127,6 +1127,16 @@ namespace MathNet.Numerics.LinearAlgebra return Dense(DenseVectorStorage.OfVector(vector.Storage)); } + /// + /// Create a new dense vector as a copy of the given array. + /// This new vector will be independent from the array. + /// A new memory block will be allocated for storing the vector. + /// + public Vector DenseOfArray(T[] array) + { + return Dense(DenseVectorStorage.OfVector(new DenseVectorStorage(array.Length, array))); + } + /// /// Create a new dense vector as a copy of the given enumerable. /// This new vector will be independent from the enumerable. @@ -1192,6 +1202,16 @@ namespace MathNet.Numerics.LinearAlgebra return Sparse(SparseVectorStorage.OfVector(vector.Storage)); } + /// + /// Create a new sparse vector as a copy of the given array. + /// This new vector will be independent from the array. + /// A new memory block will be allocated for storing the vector. + /// + public Vector SparseOfArray(T[] array) + { + return Sparse(SparseVectorStorage.OfEnumerable(array)); + } + /// /// Create a new sparse vector as a copy of the given enumerable. /// This new vector will be independent from the enumerable. diff --git a/src/Numerics/LinearAlgebra/Complex/DenseVector.cs b/src/Numerics/LinearAlgebra/Complex/DenseVector.cs index 25d89b4e..616f3377 100644 --- a/src/Numerics/LinearAlgebra/Complex/DenseVector.cs +++ b/src/Numerics/LinearAlgebra/Complex/DenseVector.cs @@ -106,6 +106,16 @@ namespace MathNet.Numerics.LinearAlgebra.Complex return new DenseVector(DenseVectorStorage.OfVector(vector.Storage)); } + /// + /// Create a new dense vector as a copy of the given array. + /// This new vector will be independent from the array. + /// A new memory block will be allocated for storing the vector. + /// + public static DenseVector OfArray(Complex[] array) + { + return new DenseVector(DenseVectorStorage.OfVector(new DenseVectorStorage(array.Length, array))); + } + /// /// Create a new dense vector as a copy of the given enumerable. /// This new vector will be independent from the enumerable. diff --git a/src/Numerics/LinearAlgebra/Complex32/DenseVector.cs b/src/Numerics/LinearAlgebra/Complex32/DenseVector.cs index d6b9603a..2dc09c29 100644 --- a/src/Numerics/LinearAlgebra/Complex32/DenseVector.cs +++ b/src/Numerics/LinearAlgebra/Complex32/DenseVector.cs @@ -101,6 +101,16 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32 return new DenseVector(DenseVectorStorage.OfVector(vector.Storage)); } + /// + /// Create a new dense vector as a copy of the given array. + /// This new vector will be independent from the array. + /// A new memory block will be allocated for storing the vector. + /// + public static DenseVector OfArray(Complex32[] array) + { + return new DenseVector(DenseVectorStorage.OfVector(new DenseVectorStorage(array.Length, array))); + } + /// /// Create a new dense vector as a copy of the given enumerable. /// This new vector will be independent from the enumerable. diff --git a/src/Numerics/LinearAlgebra/Double/DenseVector.cs b/src/Numerics/LinearAlgebra/Double/DenseVector.cs index 51b86d7f..ae78f98d 100644 --- a/src/Numerics/LinearAlgebra/Double/DenseVector.cs +++ b/src/Numerics/LinearAlgebra/Double/DenseVector.cs @@ -101,6 +101,16 @@ namespace MathNet.Numerics.LinearAlgebra.Double return new DenseVector(DenseVectorStorage.OfVector(vector.Storage)); } + /// + /// Create a new dense vector as a copy of the given array. + /// This new vector will be independent from the array. + /// A new memory block will be allocated for storing the vector. + /// + public static DenseVector OfArray(double[] array) + { + return new DenseVector(DenseVectorStorage.OfVector(new DenseVectorStorage(array.Length, array))); + } + /// /// Create a new dense vector as a copy of the given enumerable. /// This new vector will be independent from the enumerable. diff --git a/src/Numerics/LinearAlgebra/Single/DenseVector.cs b/src/Numerics/LinearAlgebra/Single/DenseVector.cs index 61458d44..f36fd081 100644 --- a/src/Numerics/LinearAlgebra/Single/DenseVector.cs +++ b/src/Numerics/LinearAlgebra/Single/DenseVector.cs @@ -100,6 +100,16 @@ namespace MathNet.Numerics.LinearAlgebra.Single return new DenseVector(DenseVectorStorage.OfVector(vector.Storage)); } + /// + /// Create a new dense vector as a copy of the given array. + /// This new vector will be independent from the array. + /// A new memory block will be allocated for storing the vector. + /// + public static DenseVector OfArray(float[] array) + { + return new DenseVector(DenseVectorStorage.OfVector(new DenseVectorStorage(array.Length, array))); + } + /// /// Create a new dense vector as a copy of the given enumerable. /// This new vector will be independent from the enumerable.