|
From: <pva...@us...> - 2007-03-09 04:08:21
|
Revision: 447
http://svn.sourceforge.net/dnanalytics/?rev=447&view=rev
Author: pvandervelde
Date: 2007-03-08 20:07:57 -0800 (Thu, 08 Mar 2007)
Log Message:
-----------
- Bug fix for bug number: 1676817 - Getting Submatrix of Sparse matrix fails.
- Fixed copy-paste error in Matrix.CheckRange --> Changed 'row' to 'column'
Modified Paths:
--------------
numerical/trunk/LinearAlgebra/Matrix.cs
numerical/trunk/LinearAlgebra/SparseMatrix.cs
numerical/trunk/UnitTests/LinearAlgebra/AbstractMatrixTest.cs
numerical/trunk/UnitTests/LinearAlgebra/SparseMatrixTest.cs
Property Changed:
----------------
numerical/trunk/
Property changes on: numerical/trunk
___________________________________________________________________
Name: svn:ignore
- NumericalLibrary.csproj.user
bin
obj
NumericalLibrary.suo
NumericalLibrary.resharper.user
_ReSharper.NumericalLibrary
+ NumericalLibrary.csproj.user
bin
obj
NumericalLibrary.suo
NumericalLibrary.resharper.user
_ReSharper.NumericalLibrary
dna.nunit
Modified: numerical/trunk/LinearAlgebra/Matrix.cs
===================================================================
--- numerical/trunk/LinearAlgebra/Matrix.cs 2007-02-08 16:14:30 UTC (rev 446)
+++ numerical/trunk/LinearAlgebra/Matrix.cs 2007-03-09 04:07:57 UTC (rev 447)
@@ -1979,7 +1979,7 @@
}
if (column < 0 || column >= columns)
{
- throw new ArgumentOutOfRangeException("row");
+ throw new ArgumentOutOfRangeException("column");
}
}
#endregion Private Methods
Modified: numerical/trunk/LinearAlgebra/SparseMatrix.cs
===================================================================
--- numerical/trunk/LinearAlgebra/SparseMatrix.cs 2007-02-08 16:14:30 UTC (rev 446)
+++ numerical/trunk/LinearAlgebra/SparseMatrix.cs 2007-03-09 04:07:57 UTC (rev 447)
@@ -1174,7 +1174,7 @@
{
// check if the column index is in the range
if ((((mColumnIndices[j] - columnRange.Start) % columnRange.Stride) == 0) &&
- (mColumnIndices[j] <= columnRange.End))
+ (mColumnIndices[j] >= columnRange.Start) && (mColumnIndices[j] <= columnRange.End))
{
int column = ((mColumnIndices[j] - columnRange.Start) / columnRange.Stride);
result[row, column] = mValues[j];
Modified: numerical/trunk/UnitTests/LinearAlgebra/AbstractMatrixTest.cs
===================================================================
--- numerical/trunk/UnitTests/LinearAlgebra/AbstractMatrixTest.cs 2007-02-08 16:14:30 UTC (rev 446)
+++ numerical/trunk/UnitTests/LinearAlgebra/AbstractMatrixTest.cs 2007-03-09 04:07:57 UTC (rev 447)
@@ -3285,7 +3285,7 @@
}
}
}
-
+
[Test]
[ExpectedException(typeof(ArgumentOutOfRangeException))]
public void SubMatrixArgumentOutOfRange1()
Modified: numerical/trunk/UnitTests/LinearAlgebra/SparseMatrixTest.cs
===================================================================
--- numerical/trunk/UnitTests/LinearAlgebra/SparseMatrixTest.cs 2007-02-08 16:14:30 UTC (rev 446)
+++ numerical/trunk/UnitTests/LinearAlgebra/SparseMatrixTest.cs 2007-03-09 04:07:57 UTC (rev 447)
@@ -1,4 +1,5 @@
using dnAnalytics.LinearAlgebra;
+using dnAnalytics.LinearAlgebra.IO;
using NUnit.Framework;
namespace dnAnalytics.UnitTests.LinearAlgebra
@@ -41,7 +42,63 @@
return VectorBuilder.CreateVector(source, VectorType.Sparse);
}
}
+
+ [TestFixture]
+ [Category("Managed")]
+ [Category("Sparse")]
+ public class AdditionalSparseMatrixTest
+ {
+ private static readonly double[,] square = new double[,] { { -1.1, -2.2, -3.3 }, { 1.1, 2.2, 3.3 }, { -4.4, 5.5, 6.6 } };
+ private Matrix GetMatrix(double[,] data)
+ {
+ int rows = data.GetLength(0);
+ int cols = data.GetLength(1);
+ Matrix ret = MatrixBuilder.CreateMatrix(rows, cols, MatrixType.Sparse);
+ for (int i = 0; i < rows; i++)
+ {
+ for (int j = 0; j < cols; j++)
+ {
+ ret[i, j] = data[i, j];
+ }
+ }
+
+ return ret;
+ }
+
+ // BUG FIX TEST:
+ // Bug behavior:
+ // I get an IndexOutOfRangeException when trying to get the submatrix of a sparse matrix (in special cases).
+ // Here is the sample code:
+ // DelimitedMatrixReader reader = new DelimitedMatrixReader(',');
+ // Matrix matrix = reader.ReadMatrix("matrix-bug.txt", MatrixType.Sparse);
+ // Range range = new Range(82, 138);
+ // Matrix subMatrix = matrix.SubMatrix(range, range);
+ // Bug reason: The sparse matrix did not check if the returned columns were within the
+ // range from the lower side, thereby returning negative column indices.
+
+ [Test]
+ public void SubMatrixTest()
+ {
+ Matrix matrix = GetMatrix(square);
+ Range rowRange = new Range(1, matrix.Rows - 1, 1);
+ Range colRange = new Range(1, matrix.Columns - 1, 1);
+ Matrix subMatrix = matrix.SubMatrix(rowRange, colRange);
+
+ int m = (rowRange.End - rowRange.Start) / rowRange.Stride + 1;
+ int n = (colRange.End - colRange.Start) / colRange.Stride + 1;
+ Assert.AreEqual(m, subMatrix.Rows);
+ Assert.AreEqual(n, subMatrix.Columns);
+ for (int i = rowRange.Start, ii = 0; i <= rowRange.End; i += rowRange.Stride, ii++)
+ {
+ for (int j = colRange.Start, jj = 0; j <= colRange.End; j += colRange.Stride, jj++)
+ {
+ Assert.AreEqual(matrix[i, j], subMatrix[ii, jj]);
+ }
+ }
+ }
+ }
+
[TestFixture]
[Category("Managed")]
[Category("Sparse")]
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|