mojolearn.lu_factor#

mojolearn.lu_factor(a, *, numeric_mode=None)#

LU factorization of a square matrix with partial pivoting.

Follows scipy.linalg.lu_factor: returns (lu, piv), where lu holds the unit lower-triangular L (diagonal not stored) and U in one float32 matrix, and piv holds the 0-based row interchanges, applied in order. Pivoting picks the largest absolute value in the column; ties go to the lowest row. A zero pivot is kept and a RuntimeWarning is issued, as scipy does.

Parameters:
  • a (array-like of shape (n, n)) – The matrix to factor; must be finite.

  • numeric_mode ({“identical”, “fast”} or None, default None) – Numeric mode for this call. None uses the package default ("identical" unless changed). In identical mode, mojolearn returns the same bits on Apple, NVIDIA and AMD GPUs. "fast" is available on Apple GPUs only.

Returns:

  • lu (ndarray of shape (n, n), float32)

  • piv (ndarray of shape (n,), int32) – Pass the pair to lu_solve().

Raises:

ValueError – If a is not square, is empty, or contains NaN or infinity.

Examples

>>> import numpy as np, mojolearn
>>> A = np.random.default_rng(0).random((8, 8), dtype=np.float32) + 8 * np.eye(8, dtype=np.float32)
>>> lu, piv = mojolearn.lu_factor(A)
>>> x = mojolearn.lu_solve((lu, piv), np.ones(8, dtype=np.float32))