From ad97f31b72c7388279e6787db463ec3d31ce146b Mon Sep 17 00:00:00 2001 From: Marcus Cuda Date: Mon, 22 Oct 2012 14:28:33 +0300 Subject: [PATCH] trimmed result array so that result._nonZeroValues only contains NonZeroCount elements instead of _nonZeroValues.Length --- src/Numerics/LinearAlgebra/Complex/SparseVector.cs | 7 ++++--- src/Numerics/LinearAlgebra/Complex32/SparseVector.cs | 5 +++-- src/Numerics/LinearAlgebra/Double/SparseVector.cs | 5 +++-- src/Numerics/LinearAlgebra/Single/SparseVector.cs | 5 +++-- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/Numerics/LinearAlgebra/Complex/SparseVector.cs b/src/Numerics/LinearAlgebra/Complex/SparseVector.cs index 952ca8b7..50be94b0 100644 --- a/src/Numerics/LinearAlgebra/Complex/SparseVector.cs +++ b/src/Numerics/LinearAlgebra/Complex/SparseVector.cs @@ -749,10 +749,11 @@ namespace MathNet.Numerics.LinearAlgebra.Complex sparseResult.NonZerosCount = NonZerosCount; sparseResult._nonZeroIndices = new int[NonZerosCount]; Buffer.BlockCopy(_nonZeroIndices, 0, sparseResult._nonZeroIndices, 0, NonZerosCount * Constants.SizeOfInt); - sparseResult._nonZeroValues = new Complex[_nonZeroValues.Length]; + sparseResult._nonZeroValues = new Complex[NonZerosCount]; + Array.Copy(_nonZeroValues, sparseResult._nonZeroValues, NonZerosCount); } - - Control.LinearAlgebraProvider.ScaleArray(scalar, _nonZeroValues, sparseResult._nonZeroValues); + + Control.LinearAlgebraProvider.ScaleArray(scalar, sparseResult._nonZeroValues, sparseResult._nonZeroValues); } } diff --git a/src/Numerics/LinearAlgebra/Complex32/SparseVector.cs b/src/Numerics/LinearAlgebra/Complex32/SparseVector.cs index 8fbe134e..816d0119 100644 --- a/src/Numerics/LinearAlgebra/Complex32/SparseVector.cs +++ b/src/Numerics/LinearAlgebra/Complex32/SparseVector.cs @@ -779,10 +779,11 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32 sparseResult.NonZerosCount = NonZerosCount; sparseResult._nonZeroIndices = new int[NonZerosCount]; Buffer.BlockCopy(_nonZeroIndices, 0, sparseResult._nonZeroIndices, 0, NonZerosCount * Constants.SizeOfInt); - sparseResult._nonZeroValues = new Complex32[_nonZeroValues.Length]; + sparseResult._nonZeroValues = new Complex32[NonZerosCount]; + Array.Copy(_nonZeroValues, sparseResult._nonZeroValues, NonZerosCount); } - Control.LinearAlgebraProvider.ScaleArray(scalar, _nonZeroValues, sparseResult._nonZeroValues); + Control.LinearAlgebraProvider.ScaleArray(scalar, sparseResult._nonZeroValues, sparseResult._nonZeroValues); } } diff --git a/src/Numerics/LinearAlgebra/Double/SparseVector.cs b/src/Numerics/LinearAlgebra/Double/SparseVector.cs index 39c89fb7..709c224e 100644 --- a/src/Numerics/LinearAlgebra/Double/SparseVector.cs +++ b/src/Numerics/LinearAlgebra/Double/SparseVector.cs @@ -723,10 +723,11 @@ namespace MathNet.Numerics.LinearAlgebra.Double sparseResult.NonZerosCount = NonZerosCount; sparseResult._nonZeroIndices = new int[NonZerosCount]; Buffer.BlockCopy(_nonZeroIndices, 0, sparseResult._nonZeroIndices, 0, NonZerosCount * Constants.SizeOfInt); - sparseResult._nonZeroValues = new double[_nonZeroValues.Length]; + sparseResult._nonZeroValues = new double[NonZerosCount]; + Buffer.BlockCopy(_nonZeroValues, 0, sparseResult._nonZeroValues, 0, NonZerosCount * Constants.SizeOfDouble); } - Control.LinearAlgebraProvider.ScaleArray(scalar, _nonZeroValues, sparseResult._nonZeroValues); + Control.LinearAlgebraProvider.ScaleArray(scalar, sparseResult._nonZeroValues, sparseResult._nonZeroValues); } } diff --git a/src/Numerics/LinearAlgebra/Single/SparseVector.cs b/src/Numerics/LinearAlgebra/Single/SparseVector.cs index 148da12b..9526acaa 100644 --- a/src/Numerics/LinearAlgebra/Single/SparseVector.cs +++ b/src/Numerics/LinearAlgebra/Single/SparseVector.cs @@ -731,10 +731,11 @@ namespace MathNet.Numerics.LinearAlgebra.Single sparseResult.NonZerosCount = NonZerosCount; sparseResult._nonZeroIndices = new int[NonZerosCount]; Buffer.BlockCopy(_nonZeroIndices, 0, sparseResult._nonZeroIndices, 0, NonZerosCount * Constants.SizeOfInt); - sparseResult._nonZeroValues = new float[_nonZeroValues.Length]; + sparseResult._nonZeroValues = new float[NonZerosCount]; + Buffer.BlockCopy(_nonZeroValues, 0, sparseResult._nonZeroValues, 0, NonZerosCount * Constants.SizeOfFloat); } - Control.LinearAlgebraProvider.ScaleArray(scalar, _nonZeroValues, sparseResult._nonZeroValues); + Control.LinearAlgebraProvider.ScaleArray(scalar, sparseResult._nonZeroValues, sparseResult._nonZeroValues); } }