skcuda.linalg.cho_solve

skcuda.linalg.cho_solve(a_gpu, b_gpu, uplo='L', lib='cusolver')[source]

Cholesky solver.

Solve a system of equations via Cholesky factorization, i.e. a*x = b. Overwrites b to give inv(a)*b, and overwrites the chosen triangle of a with factorized triangle.

Parameters:
  • a (pycuda.gpuarray.GPUArray) – Input matrix of shape (m, m) to decompose.
  • b (pycuda.gpuarray.GPUArray) – Input matrix of shape (m, 1) to decompose.
  • uplo (chr) – Use the upper=’U’ or lower=’L’ (default) triangle of a.
  • lib (str) – Library to use. May be either ‘cula’ or ‘cusolver’.

Notes

If using CULA, double precision is only supported if the standard version of the CULA Dense toolkit is installed.

Examples

>>> import pycuda.gpuarray as gpuarray
>>> import pycuda.autoinit
>>> import numpy as np
>>> import scipy.linalg
>>> import skcuda.linalg as linalg
>>> linalg.init()
>>> a = np.array([[3, 0], [0, 7]]).asarray(np.float64)
>>> a_gpu = gpuarray.to_gpu(a)
>>> b = np.array([11, 19]).astype(np.float64)
>>> b_gpu  = gpuarray.to_gpu(b)
>>> cho_solve(a_gpu, b_gpu)
>>> np.allclose(b_gpu.get(), scipy.linalg.cho_solve(scipy.linalg.cho_factor(a), b))
True