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]