Source code for mmfutils.math.linalg

"""Linear Algebra Routines"""
__all__ = ['block_diag']

import numpy as np


[docs]def block_diag(arrays): """Create a new diagonal matrix from the provided arrays. Parameters ---------- a, b, c, ... : ndarray Input arrays. Returns ------- D : ndarray Array with a, b, c, ... on the diagonal. Examples -------- """ arrays = list(map(np.asarray, arrays)) shapes = np.array([a.shape for a in arrays]) out = np.zeros(np.sum(shapes, axis=0)) r, c = 0, 0 for i, (rr, cc) in enumerate(shapes): out[r:r + rr, c:c + cc] = arrays[i] r += rr c += cc return out