Imports System Imports CenterSpace.NMath.Core Imports Range = CenterSpace.NMath.Core.Range Namespace CenterSpace.NMath.Examples.VisualBasic A .NET example in Visual Basic showing how to use the indexing class Range with the matrix classes. Module MatrixRangeExample Sub Main() Dim rows As Integer = 5 Dim cols As Integer = 5 Dim A As New DoubleMatrix(rows, cols, 0, 1) | 0 5 10 15 20 | | 1 6 11 16 21 | A = | 2 7 12 17 22 | | 3 8 13 18 23 | | 4 9 14 19 24 | Console.WriteLine() Console.WriteLine("A...") Console.WriteLine(A.ToTabDelimited()) Console.WriteLine() Last two columns of the matrix A: Dim colRange As New Range(3, 4) Dim rowRange As Range = Range.All Dim ALast2Col As DoubleMatrix = A(rowRange, colRange) | 15 20 | | 16 21 | ALast2Col = | 17 22 | | 18 23 | | 19 24 | Console.WriteLine("ALast2Col...") Console.WriteLine(ALast2Col.ToTabDelimited) Console.WriteLine() Could also get this by specifying all elements from the 4th column to the end using the End value from the enum CenterSpace.NMath.Core.Position ALast2Col = A(rowRange, New Range(3, Position.End)) Console.WriteLine("ALast2Col...") Console.WriteLine(ALast2Col.ToTabDelimited) Console.WriteLine() You can use negative strides too. Here is the matrix A, reversed. We re-use the Range objects, setting their start, stop, and stride fields using the Set method. rowRange = New Range(rows - 1, 0, -1) colRange.Set(cols - 1, 0, -1) Dim ARev As DoubleMatrix = A(rowRange, colRange) | 24 19 14 9 4 | | 23 18 13 8 3 | ARev = | 22 17 12 7 2 | | 21 16 11 6 1 | | 20 15 10 5 0 | Console.WriteLine("ARev...") Console.WriteLine(ARev.ToTabDelimited) Console.WriteLine() Notice that when you create a new DoubleMatrix using the Range or Slice class, you are creating a different "view" of the Matrix data. That is, the DoubleMatrix instance returned by the indexing operator taking a Range object, and the DoubleMatrix instance being indexed share the same data: ARev(0, 0) = 100 Console.WriteLine("ARev[0,0] = {0}", ARev(0, 0)) uRev = [0 8 7 6 5 4 3 2 1 0] Console.WriteLine() Console.WriteLine("A[{0},{1}] = {2}", rows - 1, cols - 1, A(rows - 1, cols - 1)) A[4,4] Console.WriteLine() We now use the DoubleMatrix method Set(Range,Range,value) to change the contents of A to alternate values 0 and 1 - like a checker board. Dim evenElts As New Range(0, Position.End, 2) Dim oddElts As New Range(1, Position.End, 2) A.Set(evenElts, oddElts, 0) A.Set(evenElts, evenElts, 1) A.Set(oddElts, evenElts, 0) A.Set(oddElts, oddElts, 1) | 1 0 1 0 1 | | 0 1 0 1 0 | A = | 1 0 1 0 1 | | 0 1 0 1 0 | | 1 0 1 0 1 | Console.WriteLine("A...") Console.WriteLine(A.ToTabDelimited) Console.WriteLine() Console.WriteLine("Press Enter Key") Console.Read() End Sub End Module End Namespace← All NMath Code Examples