6.3 Value Operations on Matrices (.NET, C#, CSharp, VB, Visual Basic, F#)
The matrix classes have the following read-only properties:
● Cols gets the number of columns in a matrix.
● ColStride gets the step increment between successive elements in a column.
● Rows gets the number of rows in a matrix.
● RowStride gets the step increment between successive elements in a column.
● DataBlock gets a reference to the data block that a matrix is viewing.
For example, if A is a FloatComplexMatrix instance:
Code Example – C# matrix
int cols = A.Cols;
int rows = A.Rows;
FloatComplexDataBlock block = A.DataBlock;
Code Example – VB matrix
Dim Cols As Integer = A.Cols
Dim Rows As Integer = A.Rows
Dim Block As FloatComplexDataBlock = A.DataBlock
NOTE—As described in Section 4.1, use caution when accessing a data block referenced by a matrix. Other objects may be viewing the same data.
Accessing and Modifying Matrix Values
The matrix classes provide standard indexers for getting and setting element value at a specified row and column position in a matrix. Thus, A[i,j] always returns the element in the ith row and jth column of matrix A's view of the data.
NOTE—Indexing starts at 0.
Thus, this code sets the value in the lower right corner of the matrix to zero:
Code Example – C# matrix
var A = new DoubleMatrix( "2x2 [1 2 3 4]" );
A[1,1] = 0;
Code Example – VB matrix
Dim A As New DoubleMatrix("2x2 [1 2 3 4]")
A(1, 1) = 0
The matrix indexer is also overloaded to accept Range and Slice indexing objects. For instance:
Code Example – C# matrix
var A = new DoubleMatrix( 5, 5, 2);
var B = new DoubleMatrix( 2, 2, 1);
var s = new Slice( 0, 2 );
A[s,s] = B
Code Example – VB matrix
Dim A As New DoubleMatrix(5, 5, 2)
Dim B As New DoubleMatrix(2, 2, 1)
Dim S As New Slice(0, 2)
A(S, S) = B
You can also use the Set() member function to set the data elements of a matrix to a specified value. For instance, this code sets values in the last two columns of matrix A to zero:
Code Example – C# matrix
int rows = 5, cols = 5;
var A = new DoubleMatrix( rows, cols, 0, 1 );
var col = new Slice( 3, 2 );
Slice row = Slice.All;
A.Set( col, row, 0 );
Code Example – VB matrix
Dim Rows As Integer = 5
Dim Cols As Integer = 5
Dim A As New DoubleMatrix(Rows, Cols, 0, 1)
Dim Col As New Slice(3, 2)
Dim Row As Slice = Slice.All
A.Set(Col, Row, 0)
You can replace either slice with an integer value indicating a particular row or column. Thus, this code changes the values in the first column of A to -1:
Code Example – C# matrix
A.Set( 1, Slice.All, -1);
Code Example – VB matrix
A.Set(1, Slice.All, -1)
NOTE—Any method that returns a vector view of the data referenced by a matrix can be used to modify the values of matrix, since the returned vector and the matrix share the data. See Section 6.6.
Clearing and Resizing a Matrix
The matrix classes provide two methods for changing the size of a matrix after it has been created:
● Clear() resets the value of all data elements to zero.
● Resize() changes the size of a matrix to the specified number of rows and columns, adding zeros or truncating as necessary.
● ResizeAndClear() performs the same function as Resize(), but also resets the value of all remaining data elements to zero.