From bacac933367dced3390c82fdb90be2b01603fae4 Mon Sep 17 00:00:00 2001 From: Jurgen Van Gael Date: Fri, 9 Sep 2011 04:21:47 +0800 Subject: [PATCH] Fixed sparse vector bug. --- .../LinearAlgebra/Double/SparseVector.cs | 5 +--- .../Double/SparseVectorTest.cs | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/Numerics/LinearAlgebra/Double/SparseVector.cs b/src/Numerics/LinearAlgebra/Double/SparseVector.cs index 3e51fd79..21d4e555 100644 --- a/src/Numerics/LinearAlgebra/Double/SparseVector.cs +++ b/src/Numerics/LinearAlgebra/Double/SparseVector.cs @@ -980,10 +980,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double { for (var j = 0; j < v.NonZerosCount; j++) { - if (u._nonZeroIndices[i] == v._nonZeroIndices[j]) - { - matrix.At(i, j, u._nonZeroValues[i] * v._nonZeroValues[j]); - } + matrix.At(i, j, u._nonZeroValues[i] * v._nonZeroValues[j]); } } diff --git a/src/UnitTests/LinearAlgebraTests/Double/SparseVectorTest.cs b/src/UnitTests/LinearAlgebraTests/Double/SparseVectorTest.cs index ffb284c1..745399c8 100644 --- a/src/UnitTests/LinearAlgebraTests/Double/SparseVectorTest.cs +++ b/src/UnitTests/LinearAlgebraTests/Double/SparseVectorTest.cs @@ -432,5 +432,32 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double Assert.AreEqual(2, result.NonZerosCount); } + + /// + /// Can outer multiple two sparse vectors. Checking fix for workitem 5696. + /// + [Test] + public void CanOuterMultiplySparseVectors() + { + var vector1 = new SparseVector(new[] { 2.0, 2.0, 0.0, 0.0 }); + var vector2 = new SparseVector(new[] { 2.0, 2.0, 0.0, 0.0 }); + var result = vector1.OuterProduct(vector2); + + Assert.AreEqual(4.0, result[0, 0]); + Assert.AreEqual(4.0, result[0, 1]); + Assert.AreEqual(4.0, result[1, 0]); + Assert.AreEqual(4.0, result[1, 1]); + + for (var i = 0; i < vector1.Count; i++) + { + for (var j = 0; j < vector2.Count; j++) + { + if (i > 1 || j > 1) + { + Assert.AreEqual(0.0, result[i, j]); + } + } + } + } } }