Immutable Matrices¶
The standard Matrix class in Diofant is mutable. This is important for
performance reasons but means that standard matrices can not interact well with
the rest of Diofant. This is because the Basic
object, from which most
Diofant classes inherit, is immutable.
The mission of the ImmutableMatrix
class is to bridge the tension
between performance/mutability and safety/immutability. Immutable matrices can
do almost everything that normal matrices can do but they inherit from
Basic
and can thus interact more naturally with the rest of Diofant.
ImmutableMatrix
also inherits from MatrixExpr
, allowing it to
interact freely with Diofant’s Matrix Expression module.
You can turn any Matrixlike object into an ImmutableMatrix
by calling
the constructor
>>> M = Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> M[1, 1] = 0
>>> IM = ImmutableMatrix(M)
>>> IM
Matrix([
[1, 2, 3],
[4, 0, 6],
[7, 8, 9]])
>>> IM[1, 1] = 5
Traceback (most recent call last):
...
TypeError: Can not set values in Immutable Matrix. Use Matrix instead.
ImmutableMatrix Class Reference¶

class
diofant.matrices.immutable.
ImmutableMatrix
[source]¶ Create an immutable version of a matrix.
Examples
>>> ImmutableMatrix(eye(3)) Matrix([ [1, 0, 0], [0, 1, 0], [0, 0, 1]]) >>> _[0, 0] = 42 Traceback (most recent call last): ... TypeError: Cannot set values of ImmutableDenseMatrix

C
¶ Byelement conjugation.

adjoint
()¶ Conjugate transpose or Hermitian conjugation.

as_mutable
()¶ Returns a mutable version of this matrix
Examples
>>> X = ImmutableMatrix([[1, 2], [3, 4]]) >>> Y = X.as_mutable() >>> Y[1, 1] = 5 # Can set values in Y >>> Y Matrix([ [1, 2], [3, 5]])

conjugate
()¶ Byelement conjugation.

equals
(other, failing_expression=False)¶ Applies
equals
to corresponding elements of the matrices, trying to prove that the elements are equivalent, returning True if they are, False if any pair is not, and None (or the first failing expression if failing_expression is True) if it cannot be decided if the expressions are equivalent or not. This is, in general, an expensive operation.Examples
>>> A = Matrix([x*(x  1), 0]) >>> B = Matrix([x**2  x, 0]) >>> A == B False >>> A.simplify() == B.simplify() True >>> A.equals(B) True >>> A.equals(2) False
See also

is_zero
¶ Checks if a matrix is a zero matrix.
A matrix is zero if every element is zero. A matrix need not be square to be considered zero. The empty matrix is zero by the principle of vacuous truth. For a matrix that may or may not be zero (e.g. contains a symbol), this will be None
Examples
>>> a = Matrix([[0, 0], [0, 0]]) >>> b = zeros(3, 4) >>> c = Matrix([[0, 1], [0, 0]]) >>> d = Matrix([]) >>> e = Matrix([[x, 0], [0, 0]]) >>> a.is_zero True >>> b.is_zero True >>> c.is_zero False >>> d.is_zero True >>> e.is_zero
