diff --git a/src/Numerics/LinearAlgebra/Complex/SparseMatrix.cs b/src/Numerics/LinearAlgebra/Complex/SparseMatrix.cs
index a2cf4afa..648248f2 100644
--- a/src/Numerics/LinearAlgebra/Complex/SparseMatrix.cs
+++ b/src/Numerics/LinearAlgebra/Complex/SparseMatrix.cs
@@ -428,8 +428,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex
for (int i = rowIndex, row = 0; i < rowMax; i++, row++)
{
var startIndex = _rowIndex[i];
- var endIndex = row < _rowIndex.Length - 1 ? _rowIndex[i + 1] : NonZerosCount;
-
+ var endIndex = i < _rowIndex.Length - 1 ? _rowIndex[i + 1] : NonZerosCount;
for (int j = startIndex; j < endIndex; j++)
{
// check if the column index is in the range
diff --git a/src/Numerics/LinearAlgebra/Complex32/SparseMatrix.cs b/src/Numerics/LinearAlgebra/Complex32/SparseMatrix.cs
index f5c3c4c0..d0d42085 100644
--- a/src/Numerics/LinearAlgebra/Complex32/SparseMatrix.cs
+++ b/src/Numerics/LinearAlgebra/Complex32/SparseMatrix.cs
@@ -428,7 +428,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32
for (int i = rowIndex, row = 0; i < rowMax; i++, row++)
{
var startIndex = _rowIndex[i];
- var endIndex = row < _rowIndex.Length - 1 ? _rowIndex[i + 1] : NonZerosCount;
+ var endIndex = i < _rowIndex.Length - 1 ? _rowIndex[i + 1] : NonZerosCount;
for (int j = startIndex; j < endIndex; j++)
{
diff --git a/src/Numerics/LinearAlgebra/Double/SparseMatrix.cs b/src/Numerics/LinearAlgebra/Double/SparseMatrix.cs
index 1a1def63..25870ef1 100644
--- a/src/Numerics/LinearAlgebra/Double/SparseMatrix.cs
+++ b/src/Numerics/LinearAlgebra/Double/SparseMatrix.cs
@@ -421,7 +421,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double
for (int i = rowIndex, row = 0; i < rowMax; i++, row++)
{
var startIndex = _rowIndex[i];
- var endIndex = row < _rowIndex.Length - 1 ? _rowIndex[i + 1] : NonZerosCount;
+ var endIndex = i < _rowIndex.Length - 1 ? _rowIndex[i + 1] : NonZerosCount;
for (int j = startIndex; j < endIndex; j++)
{
diff --git a/src/Numerics/LinearAlgebra/Single/SparseMatrix.cs b/src/Numerics/LinearAlgebra/Single/SparseMatrix.cs
index 945bf895..db4351b6 100644
--- a/src/Numerics/LinearAlgebra/Single/SparseMatrix.cs
+++ b/src/Numerics/LinearAlgebra/Single/SparseMatrix.cs
@@ -422,7 +422,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single
for (int i = rowIndex, row = 0; i < rowMax; i++, row++)
{
var startIndex = _rowIndex[i];
- var endIndex = row < _rowIndex.Length - 1 ? _rowIndex[i + 1] : NonZerosCount;
+ var endIndex = i < _rowIndex.Length - 1 ? _rowIndex[i + 1] : NonZerosCount;
for (int j = startIndex; j < endIndex; j++)
{
diff --git a/src/UnitTests/LinearAlgebraTests/Complex/DiagonalMatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Complex/DiagonalMatrixTests.cs
index d414ce10..3a681937 100644
--- a/src/UnitTests/LinearAlgebraTests/Complex/DiagonalMatrixTests.cs
+++ b/src/UnitTests/LinearAlgebraTests/Complex/DiagonalMatrixTests.cs
@@ -592,5 +592,43 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex
var matrix = TestMatrices["Square3x3"];
Assert.IsTrue(matrix.IsSymmetric);
}
+
+ ///
+ /// Can get a sub-matrix.
+ ///
+ [Test]
+ public override void CanGetASubMatrix()
+ {
+ var matrix = CreateMatrix(10, 10);
+ for (var row = 0; row < matrix.RowCount; row++)
+ {
+ for (var column = 0; column < matrix.ColumnCount; column++)
+ {
+ if (row == column)
+ {
+ matrix[row, column] = 1.0;
+ }
+ }
+ }
+
+ var submatrix = matrix.SubMatrix(8, 2, 0, 2);
+ Assert.AreEqual(2, submatrix.RowCount);
+ Assert.AreEqual(2, submatrix.ColumnCount);
+
+ for (var row = 0; row < submatrix.RowCount; row++)
+ {
+ for (var column = 0; column < submatrix.ColumnCount; column++)
+ {
+ if (row == column)
+ {
+ Assert.AreEqual(Complex.One, submatrix[row, column]);
+ }
+ else
+ {
+ Assert.AreEqual(Complex.Zero, submatrix[row, column]);
+ }
+ }
+ }
+ }
}
}
diff --git a/src/UnitTests/LinearAlgebraTests/Complex/MatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Complex/MatrixTests.cs
index 3c8fc9e1..1b34b2c9 100644
--- a/src/UnitTests/LinearAlgebraTests/Complex/MatrixTests.cs
+++ b/src/UnitTests/LinearAlgebraTests/Complex/MatrixTests.cs
@@ -1864,5 +1864,33 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex
matrix = TestMatrices["Square3x3"];
Assert.IsFalse(matrix.IsSymmetric);
}
+
+ ///
+ /// Can get a sub-matrix.
+ ///
+ [Test]
+ public virtual void CanGetASubMatrix()
+ {
+ var matrix = CreateMatrix(10, 10);
+ for (var row = 0; row < matrix.RowCount; row++)
+ {
+ for (var column = 0; column < matrix.ColumnCount; column++)
+ {
+ matrix[row, column] = 1.0;
+ }
+ }
+
+ var submatrix = matrix.SubMatrix(8, 2, 0, 2);
+ Assert.AreEqual(2, submatrix.RowCount);
+ Assert.AreEqual(2, submatrix.ColumnCount);
+
+ for (var row = 0; row < submatrix.RowCount; row++)
+ {
+ for (var column = 0; column < submatrix.ColumnCount; column++)
+ {
+ Assert.AreEqual(Complex.One, submatrix[row, column]);
+ }
+ }
+ }
}
}
diff --git a/src/UnitTests/LinearAlgebraTests/Complex32/DiagonalMatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Complex32/DiagonalMatrixTests.cs
index e333c3d9..c8f377f7 100644
--- a/src/UnitTests/LinearAlgebraTests/Complex32/DiagonalMatrixTests.cs
+++ b/src/UnitTests/LinearAlgebraTests/Complex32/DiagonalMatrixTests.cs
@@ -592,6 +592,42 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32
var matrix = TestMatrices["Square3x3"];
Assert.IsTrue(matrix.IsSymmetric);
}
+ ///
+ /// Can get a sub-matrix.
+ ///
+ [Test]
+ public override void CanGetASubMatrix()
+ {
+ var matrix = CreateMatrix(10, 10);
+ for (var row = 0; row < matrix.RowCount; row++)
+ {
+ for (var column = 0; column < matrix.ColumnCount; column++)
+ {
+ if (row == column)
+ {
+ matrix[row, column] = 1.0f;
+ }
+ }
+ }
+
+ var submatrix = matrix.SubMatrix(8, 2, 0, 2);
+ Assert.AreEqual(2, submatrix.RowCount);
+ Assert.AreEqual(2, submatrix.ColumnCount);
+ for (var row = 0; row < submatrix.RowCount; row++)
+ {
+ for (var column = 0; column < submatrix.ColumnCount; column++)
+ {
+ if (row == column)
+ {
+ Assert.AreEqual(Complex32.One, submatrix[row, column]);
+ }
+ else
+ {
+ Assert.AreEqual(Complex32.Zero, submatrix[row, column]);
+ }
+ }
+ }
+ }
}
}
diff --git a/src/UnitTests/LinearAlgebraTests/Complex32/MatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Complex32/MatrixTests.cs
index a8c863d1..0b8f820c 100644
--- a/src/UnitTests/LinearAlgebraTests/Complex32/MatrixTests.cs
+++ b/src/UnitTests/LinearAlgebraTests/Complex32/MatrixTests.cs
@@ -1864,5 +1864,33 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Complex32
matrix = TestMatrices["Square3x3"];
Assert.IsFalse(matrix.IsSymmetric);
}
+
+ ///
+ /// Can get a sub-matrix.
+ ///
+ [Test]
+ public virtual void CanGetASubMatrix()
+ {
+ var matrix = CreateMatrix(10, 10);
+ for (var row = 0; row < matrix.RowCount; row++)
+ {
+ for (var column = 0; column < matrix.ColumnCount; column++)
+ {
+ matrix[row, column] = 1.0f;
+ }
+ }
+
+ var submatrix = matrix.SubMatrix(8, 2, 0, 2);
+ Assert.AreEqual(2, submatrix.RowCount);
+ Assert.AreEqual(2, submatrix.ColumnCount);
+
+ for (var row = 0; row < submatrix.RowCount; row++)
+ {
+ for (var column = 0; column < submatrix.ColumnCount; column++)
+ {
+ Assert.AreEqual(Complex32.One, submatrix[row, column]);
+ }
+ }
+ }
}
}
diff --git a/src/UnitTests/LinearAlgebraTests/Double/DiagonalMatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Double/DiagonalMatrixTests.cs
index 94294fae..af838fb6 100644
--- a/src/UnitTests/LinearAlgebraTests/Double/DiagonalMatrixTests.cs
+++ b/src/UnitTests/LinearAlgebraTests/Double/DiagonalMatrixTests.cs
@@ -592,5 +592,43 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
var matrix = TestMatrices["Square3x3"];
Assert.IsTrue(matrix.IsSymmetric);
}
+
+ ///
+ /// Can get a sub-matrix.
+ ///
+ [Test]
+ public override void CanGetASubMatrix()
+ {
+ var matrix = CreateMatrix(10, 10);
+ for (var row = 0; row < matrix.RowCount; row++)
+ {
+ for (var column = 0; column < matrix.ColumnCount; column++)
+ {
+ if (row == column)
+ {
+ matrix[row, column] = 1.0;
+ }
+ }
+ }
+
+ var submatrix = matrix.SubMatrix(8, 2, 0, 2);
+ Assert.AreEqual(2, submatrix.RowCount);
+ Assert.AreEqual(2, submatrix.ColumnCount);
+
+ for (var row = 0; row < submatrix.RowCount; row++)
+ {
+ for (var column = 0; column < submatrix.ColumnCount; column++)
+ {
+ if (row == column)
+ {
+ Assert.AreEqual(1.0, submatrix[row, column]);
+ }
+ else
+ {
+ Assert.AreEqual(0.0, submatrix[row, column]);
+ }
+ }
+ }
+ }
}
}
diff --git a/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs
index 60c27cd4..aa6b53a8 100644
--- a/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs
+++ b/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.cs
@@ -1805,5 +1805,33 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double
matrix = TestMatrices["Square3x3"];
Assert.IsFalse(matrix.IsSymmetric);
}
+
+ ///
+ /// Can get a sub-matrix.
+ ///
+ [Test]
+ public virtual void CanGetASubMatrix()
+ {
+ var matrix = CreateMatrix(10, 10);
+ for (var row = 0; row < matrix.RowCount; row++)
+ {
+ for (var column = 0; column < matrix.ColumnCount; column++)
+ {
+ matrix[row, column] = 1.0;
+ }
+ }
+
+ var submatrix = matrix.SubMatrix(8, 2, 0, 2);
+ Assert.AreEqual(2, submatrix.RowCount);
+ Assert.AreEqual(2, submatrix.ColumnCount);
+
+ for (var row = 0; row < submatrix.RowCount; row++)
+ {
+ for (var column = 0; column < submatrix.ColumnCount; column++)
+ {
+ Assert.AreEqual(1.0, submatrix[row, column]);
+ }
+ }
+ }
}
}
diff --git a/src/UnitTests/LinearAlgebraTests/Single/DiagonalMatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Single/DiagonalMatrixTests.cs
index 19952524..61a57ee7 100644
--- a/src/UnitTests/LinearAlgebraTests/Single/DiagonalMatrixTests.cs
+++ b/src/UnitTests/LinearAlgebraTests/Single/DiagonalMatrixTests.cs
@@ -591,5 +591,43 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single
var matrix = TestMatrices["Square3x3"];
Assert.IsTrue(matrix.IsSymmetric);
}
+
+ ///
+ /// Can get a sub-matrix.
+ ///
+ [Test]
+ public override void CanGetASubMatrix()
+ {
+ var matrix = CreateMatrix(10, 10);
+ for (var row = 0; row < matrix.RowCount; row++)
+ {
+ for (var column = 0; column < matrix.ColumnCount; column++)
+ {
+ if (row == column)
+ {
+ matrix[row, column] = 1.0f;
+ }
+ }
+ }
+
+ var submatrix = matrix.SubMatrix(8, 2, 0, 2);
+ Assert.AreEqual(2, submatrix.RowCount);
+ Assert.AreEqual(2, submatrix.ColumnCount);
+
+ for (var row = 0; row < submatrix.RowCount; row++)
+ {
+ for (var column = 0; column < submatrix.ColumnCount; column++)
+ {
+ if (row == column)
+ {
+ Assert.AreEqual(1.0f, submatrix[row, column]);
+ }
+ else
+ {
+ Assert.AreEqual(0.0f, submatrix[row, column]);
+ }
+ }
+ }
+ }
}
}
diff --git a/src/UnitTests/LinearAlgebraTests/Single/MatrixTests.cs b/src/UnitTests/LinearAlgebraTests/Single/MatrixTests.cs
index 8701f005..71fa3886 100644
--- a/src/UnitTests/LinearAlgebraTests/Single/MatrixTests.cs
+++ b/src/UnitTests/LinearAlgebraTests/Single/MatrixTests.cs
@@ -1805,5 +1805,33 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Single
matrix = TestMatrices["Square3x3"];
Assert.IsFalse(matrix.IsSymmetric);
}
+
+ ///
+ /// Can get a sub-matrix.
+ ///
+ [Test]
+ public virtual void CanGetASubMatrix()
+ {
+ var matrix = CreateMatrix(10, 10);
+ for (var row = 0; row < matrix.RowCount; row++)
+ {
+ for (var column = 0; column < matrix.ColumnCount; column++)
+ {
+ matrix[row, column] = 1.0f;
+ }
+ }
+
+ var submatrix = matrix.SubMatrix(8, 2, 0, 2);
+ Assert.AreEqual(2, submatrix.RowCount);
+ Assert.AreEqual(2, submatrix.ColumnCount);
+
+ for (var row = 0; row < submatrix.RowCount; row++)
+ {
+ for (var column = 0; column < submatrix.ColumnCount; column++)
+ {
+ Assert.AreEqual(1.0f, submatrix[row, column]);
+ }
+ }
+ }
}
}