From 4557f67de45dcca7fd9d2e4ac866f77c62fa7731 Mon Sep 17 00:00:00 2001 From: Christoph Ruegg Date: Fri, 22 Feb 2013 18:00:41 +0100 Subject: [PATCH] LA: Vector.ToArray should use storage copy routines #96 --- .../LinearAlgebra/Complex/SparseVector.cs | 17 ----------------- .../LinearAlgebra/Complex32/SparseVector.cs | 17 ----------------- .../LinearAlgebra/Double/SparseVector.cs | 17 ----------------- src/Numerics/LinearAlgebra/Generic/Vector.cs | 12 ++++-------- .../LinearAlgebra/Single/SparseVector.cs | 17 ----------------- 5 files changed, 4 insertions(+), 76 deletions(-) diff --git a/src/Numerics/LinearAlgebra/Complex/SparseVector.cs b/src/Numerics/LinearAlgebra/Complex/SparseVector.cs index 98aa4a65..96835089 100644 --- a/src/Numerics/LinearAlgebra/Complex/SparseVector.cs +++ b/src/Numerics/LinearAlgebra/Complex/SparseVector.cs @@ -1325,22 +1325,5 @@ namespace MathNet.Numerics.LinearAlgebra.Complex yield return new Tuple(_storage.Indices[i], _storage.Values[i]); } } - - /// - /// Returns the data contained in the vector as an array. - /// - /// - /// The vector's data as an array. - /// - public override Complex[] ToArray() - { - var ret = new Complex[Count]; - for (var i = 0; i < _storage.ValueCount; i++) - { - ret[_storage.Indices[i]] = _storage.Values[i]; - } - - return ret; - } } } diff --git a/src/Numerics/LinearAlgebra/Complex32/SparseVector.cs b/src/Numerics/LinearAlgebra/Complex32/SparseVector.cs index bd5ca965..4d40cdaa 100644 --- a/src/Numerics/LinearAlgebra/Complex32/SparseVector.cs +++ b/src/Numerics/LinearAlgebra/Complex32/SparseVector.cs @@ -1325,22 +1325,5 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32 yield return new Tuple(_storage.Indices[i], _storage.Values[i]); } } - - /// - /// Returns the data contained in the vector as an array. - /// - /// - /// The vector's data as an array. - /// - public override Complex32[] ToArray() - { - var ret = new Complex32[Count]; - for (var i = 0; i < _storage.ValueCount; i++) - { - ret[_storage.Indices[i]] = _storage.Values[i]; - } - - return ret; - } } } diff --git a/src/Numerics/LinearAlgebra/Double/SparseVector.cs b/src/Numerics/LinearAlgebra/Double/SparseVector.cs index d6ed1ac2..f4057fa9 100644 --- a/src/Numerics/LinearAlgebra/Double/SparseVector.cs +++ b/src/Numerics/LinearAlgebra/Double/SparseVector.cs @@ -1377,22 +1377,5 @@ namespace MathNet.Numerics.LinearAlgebra.Double yield return new Tuple(_storage.Indices[i], _storage.Values[i]); } } - - /// - /// Returns the data contained in the vector as an array. - /// - /// - /// The vector's data as an array. - /// - public override double[] ToArray() - { - var ret = new double[Count]; - for (var i = 0; i < _storage.ValueCount; i++) - { - ret[_storage.Indices[i]] = _storage.Values[i]; - } - - return ret; - } } } diff --git a/src/Numerics/LinearAlgebra/Generic/Vector.cs b/src/Numerics/LinearAlgebra/Generic/Vector.cs index 7b17d423..efccca48 100644 --- a/src/Numerics/LinearAlgebra/Generic/Vector.cs +++ b/src/Numerics/LinearAlgebra/Generic/Vector.cs @@ -1240,15 +1240,11 @@ namespace MathNet.Numerics.LinearAlgebra.Generic /// /// The vector's data as an array. /// - public virtual T[] ToArray() + public T[] ToArray() { - var ret = new T[Count]; - for (var i = 0; i < ret.Length; i++) - { - ret[i] = At(i); - } - - return ret; + var result = new DenseVectorStorage(Count); + Storage.CopyToUnchecked(result, skipClearing: true); + return result.Data; } /// diff --git a/src/Numerics/LinearAlgebra/Single/SparseVector.cs b/src/Numerics/LinearAlgebra/Single/SparseVector.cs index 1567912e..7dbc38d4 100644 --- a/src/Numerics/LinearAlgebra/Single/SparseVector.cs +++ b/src/Numerics/LinearAlgebra/Single/SparseVector.cs @@ -1375,22 +1375,5 @@ namespace MathNet.Numerics.LinearAlgebra.Single yield return new Tuple(_storage.Indices[i], _storage.Values[i]); } } - - /// - /// Returns the data contained in the vector as an array. - /// - /// - /// The vector's data as an array. - /// - public override float[] ToArray() - { - var ret = new float[Count]; - for (var i = 0; i < _storage.ValueCount; i++) - { - ret[_storage.Indices[i]] = _storage.Values[i]; - } - - return ret; - } } }