def test_denseToSparse(self, dtype): if not cusparse.check_availability('denseToSparse'): pytest.skip('denseToSparse is not available') x = cupy.random.uniform(0, 1, self.shape).astype(dtype) x[x < self.density] = 0 y = cusparse.denseToSparse(x, format=self.format) assert y.format == self.format testing.assert_array_equal(x, y.todense())
def dense2csr(a): if a.dtype.char in 'fdFD': if cusparse.check_availability('denseToSparse'): return cusparse.denseToSparse(a, format='csr') else: return cusparse.dense2csr(a) m, n = a.shape a = cupy.ascontiguousarray(a) indptr = cupy.zeros(m + 1, dtype=numpy.int32) info = cupy.zeros(m * n + 1, dtype=numpy.int32) cupy_dense2csr_step1()(m, n, a, indptr, info) indptr = cupy.cumsum(indptr, dtype=numpy.int32) info = cupy.cumsum(info, dtype=numpy.int32) nnz = int(indptr[-1]) indices = cupy.empty(nnz, dtype=numpy.int32) data = cupy.empty(nnz, dtype=a.dtype) cupy_dense2csr_step2()(m, n, a, info, indices, data) return csr_matrix((data, indices, indptr), shape=(m, n))
def _convert_dense(self, x): if cusparse.check_availability('denseToSparse'): m = cusparse.denseToSparse(x, format='csc') else: m = cusparse.dense2csc(x) return m.data, m.indices, m.indptr