This post will talk about methods to access different types of matrix elements (diagonals, columns, rows, etc.) when a matrix is expressed as a continguous 1D array.
Recently, I was working on implementing a matrix inversion routine using the GaussJordan elimination technique in C++. This was part of the NMatrix ruby gem, and because of the limitations imposed by trying to interface a dynamic language like Ruby with C++, the elements of the NMatrix object had to expressed as a 1D contiguous C++ array for computation of the inverse.
The inplace GaussJordan matrix inversion technique uses many matrix elements in every pass. Lets see some simple equations that can be used for accessing different types of elements in a matrix in a loop.
Diagonals
Lets say we have a square matrix A with shape M. If k is iterator we are using for going over each diagonal element of the matrix, then the equation will be something like .
A for loop using the equation should look like this:
1 2 3 4 5 

Rows
To iterate over each element in a given row of a matrix, use . Here row
is the fixed row and col
goes from 0 to M1.
Columns
To iterate over each element in a given column of a matrix, use . Here col
is the fixed column and row
goes from 0 to M1.
General
In general the equation will yield a matrix element with row index row
and column index col
.