scikits.cuda.linalg.diag

scikits.cuda.linalg.diag(v_gpu)[source]

Construct a diagonal matrix if input array is one-dimensional, or extracts diagonal entries of a two-dimensional array.

— If input-array is one-dimensional: Constructs a matrix in device memory whose diagonal elements correspond to the elements in the specified array; all non-diagonal elements are set to 0.

— If input-array is two-dimensional: Constructs an array in device memory whose elements correspond to the elements along the main-diagonal of the specified array.

Parameters:

v_obj : pycuda.gpuarray.GPUArray

Input array of shape (n,m).

Returns:

d_gpu : pycuda.gpuarray.GPUArray

—If v_obj has shape (n,1), output is

diagonal matrix of dimensions [n, n].

—If v_obj has shape (n,m), output is

array of length min(n,m).

Examples

>>> import pycuda.driver as drv
>>> import pycuda.gpuarray as gpuarray
>>> import pycuda.autoinit
>>> import numpy as np
>>> import linalg
>>> linalg.init()
>>> v = np.array([1, 2, 3, 4, 5, 6], np.float32)
>>> v_gpu = gpuarray.to_gpu(v)
>>> d_gpu = linalg.diag(v_gpu)
>>> np.all(d_gpu.get() == np.diag(v))
True
>>> v = np.array([1j, 2j, 3j, 4j, 5j, 6j], np.complex64)
>>> v_gpu = gpuarray.to_gpu(v)
>>> d_gpu = linalg.diag(v_gpu)
>>> np.all(d_gpu.get() == np.diag(v))
True
>>> v = np.array([[1., 2., 3.],[4., 5., 6.]], np.float64)
>>> v_gpu = gpuarray.to_gpu(v)
>>> d_gpu = linalg.diag(v_gpu)
>>> d_gpu
array([ 1.,  5.])