2.3 Arithmetic Operations

The following table lists the arithmetic operations defined for dense matrices. In this table A and B are dense matrices with compatible dimensions, c is a scalar (a Python number or a dense 1 by 1 matrix), and d is a Python number.



Unary plus/minus +A, -A


Addition A+B, A+c, c+A


Subtraction A-B, A-c, c-A


Matrix multiplication A*B


Scalar multiplication and divisionc*A, A*c, A/c


Remainder after division A%c


Elementwise exponentiation A**d


If c in the expressions A+c, c+A, A-c, c-A is a number, then it is interpreted as a matrix with the same dimensions as A, type given by the type of c, and all entries equal to c. If c is a 1 by 1 matrix and A is not 1 by 1, then c is interpreted as a matrix with the same size of A and all entries equal to c[0].

Postmultiplying a matrix with a number c means the same as premultiplying, i.e., scalar multiplication. Dividing a matrix by c means dividing all entries by c. If c is a 1 by 1 matrix and the product c*A or A*c cannot be interpreted as a matrix-matrix product, then it is interpreted as c[0]*A. The division A/c and remainder A%c with c a 1 by 1 matrix are always interpreted as A/c[0], resp., A%c[0].

If one of the operands in the arithmetic operations is integer (a scalar integer or a matrix of type ’i’) and the other operand is double (a scalar float or a matrix of type ’d’), then the integer operand is converted to double, and the result is a matrix of type ’d’. If one of the operands is integer or double, and the other operand is complex (a scalar complex or a matrix of type ’z’), then the first operand is converted to complex, and the result is a matrix of type ’z’.

The result of A**d is a complex matrix if A or d are complex, and real otherwise.

Note that Python rounds the result of an integer division towards minus infinity.

The following in-place operations are also defined, but only if they do not change the type or the size of the matrix A:



In-place addition A+=B, A+=c


In-place subtraction A-=B, A-=c


In-place scalar multiplication and divisionA*=c, A/=c


In-place remainder A%=c


For example, if A has type ’i’, then A+=B is allowed if B has type ’i’. It is not allowed if B has type ’d’or ’z’because the addition A+B results in a matrix of type ’d’or ’z’and therefore cannot be assigned to A without changing its type.

In-place matrix-matrix products are not allowed. (Except when c is a 1 by 1 matrix, in which case A*=c is interpreted as the scalar product A*=c[0].)

It is important to know when a matrix operation creates a new object. The following rules apply.

The restrictions on in-place operations follow the principle that once a matrix object is created, its size and type cannot be modified. The only matrix attributes that can be changed are the values of the elements. The values can be changed by in-place operations or by an indexed assignment, as explained in the next section.