discretize.utils.invert_blocks#

discretize.utils.invert_blocks(A)[source]#

Invert a set of 2x2 or 3x3 matricies.

This is a shortcut function that will only invert 2x2 and 3x3 matrices. The function is broadcast over the last two dimensions of A.

Parameters
A(…, N, N) numpy.ndarray

the block of matrices to invert, N must be either 2 or 3.

Returns
(…, N, N) numpy.ndarray

the block of inverted matrices

See also

numpy.linalg.inv

Similar to this function, but is not specialized to 2x2 or 3x3

inverse_2x2_block_diagonal

use when each element of the blocks is separated

inverse_3x3_block_diagonal

use when each element of the blocks is separated

Examples

>>> from discretize.utils import invert_blocks
>>> import numpy as np
>>> x = np.ones((1000, 3, 3))
>>> x[..., 1, 1] = 0
>>> x[..., 1, 2] = 0
>>> x[..., 2, 1] = 0
>>> As = np.einsum('...ij,...jk', x, x.transpose(0, 2, 1))
>>> Ainvs = invert_blocks(As)
>>> As[0] @ Ainvs[0]
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])