Exemplo n.º 1
0
 def test_gesvdj_no_uv(self):
     a = cupy.array(self.a, order=self.order)
     s = cusolver.gesvdj(a, full_matrices=self.full_matrices,
                         compute_uv=False, overwrite_a=self.overwrite_a)
     expect = numpy.linalg.svd(self.a, full_matrices=self.full_matrices,
                               compute_uv=False)
     if self.dtype in (numpy.float32, numpy.complex64):
         decimal = 5
     else:
         decimal = 10
     testing.assert_array_almost_equal(s, expect, decimal=decimal)
Exemplo n.º 2
0
    def test_gesvdj(self):
        a = cupy.array(self.a, order=self.order)
        u, s, v = cusolver.gesvdj(a, full_matrices=self.full_matrices,
                                  overwrite_a=self.overwrite_a)

        # sigma = diag(s)
        shape = self.shape
        mn = min(shape[-2:])
        if self.full_matrices:
            sigma_shape = shape
        else:
            sigma_shape = shape[:-2] + (mn, mn)
        sigma = cupy.zeros(sigma_shape, self.dtype)
        ix = numpy.arange(mn)
        sigma[..., ix, ix] = s

        vh = v.swapaxes(-2, -1).conjugate()
        aa = cupy.matmul(cupy.matmul(u, sigma), vh)
        if self.dtype in (numpy.float32, numpy.complex64):
            decimal = 5
        else:
            decimal = 10
        testing.assert_array_almost_equal(aa, self.a, decimal=decimal)