Indexing of matrices

There are two approaches for indexing dense and sparse matrices: single-argument indexing and double-argument indexing. In double-argument indexing a matrix is indexed using two index-sets I and J.

>>> from cvxopt import matrix
>>> A = matrix(range(16),(4,4))
>>> print(A)
[  0   4   8  12]
[  1   5   9  13]
[  2   6  10  14]
[  3   7  11  15]
>>> print(A[[0,1,2,3],[0,2]])
[  0   8]
[  1   9]
[  2  10]
[  3  11]

The index-sets can be integers, lists, integer matrices, or slices.

>>> print(A[1,:])
[  1   5   9  13]
>>> print(A[::-1,::-1])
[ 15  11   7   3]
[ 14  10   6   2]
[ 13   9   5   1]
[ 12   8   4   0]

In single-argument indexing a matrix is indexed in vector-form by considering the matrix in column-major order (i.e., by stacking the columns from left to right).

>>> A[::5] = -1
>>> print(A)
[ -1   4   8  12]
[  1  -1   9  13]
[  2   6  -1  14]
[  3   7  11  -1]

This is useful for accessing parts of matrix that are not sub-matrices, e.g., the diagonal part of a matrix.