Creating matrices
CVXOPT has separate dense and sparse matrix objects. This example illustrates different ways to create dense and sparse matrices.
A dense matrix is created using the matrix()
function;
it can be created from a list (or iterator):
>>> from cvxopt import matrix
>>> A = matrix([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], (2,3))
>>> print(A)
[ 1.00e+00 3.00e+00 5.00e+00]
[ 2.00e+00 4.00e+00 6.00e+00]
>>> A.size
(2, 3)
or from a list of lists, where each inner list represents a column of the matrix:
>>> B = matrix([ [1.0, 2.0], [3.0, 4.0] ])
>>> print(B)
[ 1.00e+00 3.00e+00]
[ 2.00e+00 4.00e+00]
More generally, the inner lists can represent block-columns.
>>> print(matrix([ [A] ,[B] ]))
[ 1.00e+00 3.00e+00 5.00e+00 1.00e+00 3.00e+00]
[ 2.00e+00 4.00e+00 6.00e+00 2.00e+00 4.00e+00]
The spmatrix()
function creates a sparse matrix from a (value, row,
column) triplet description.
>>> from cvxopt import spmatrix
>>> D = spmatrix([1., 2.], [0, 1], [0, 1], (4,2))
>>> print(D)
[ 1.00e+00 0 ]
[ 0 2.00e+00]
[ 0 0 ]
[ 0 0 ]
>>> print(matrix(D))
[ 1.00e+00 0.00e+00]
[ 0.00e+00 2.00e+00]
[ 0.00e+00 0.00e+00]
[ 0.00e+00 0.00e+00]
Sparse matrices can also be constructed by concatenating other matrices
using the sparse()
function.
>>> from cvxopt import sparse
>>> E = sparse([ [B, B], [D] ])
>>> print(E)
[ 1.00e+00 3.00e+00 1.00e+00 0 ]
[ 2.00e+00 4.00e+00 0 2.00e+00]
[ 1.00e+00 3.00e+00 0 0 ]
[ 2.00e+00 4.00e+00 0 0 ]
Sparse block-diagonal matrices can be constructed using the spdiag()
function.
>>> from cvxopt import spdiag
>>> print(spdiag([B, -B, 1, 2]))
[ 1.00e+00 3.00e+00 0 0 0 0 ]
[ 2.00e+00 4.00e+00 0 0 0 0 ]
[ 0 0 -1.00e+00 -3.00e+00 0 0 ]
[ 0 0 -2.00e+00 -4.00e+00 0 0 ]
[ 0 0 0 0 1.00e+00 0 ]
[ 0 0 0 0 0 2.00e+00]