def csr2coo(x, data, indices): """Converts a CSR-matrix to COO format. Args: x (cupyx.scipy.sparse.csr_matrix): A matrix to be converted. data (cupy.ndarray): A data array for converted data. indices (cupy.ndarray): An index array for converted data. Returns: cupyx.scipy.sparse.coo_matrix: A converted matrix. """ if not check_availability('csr2coo'): raise RuntimeError('csr2coo is not available.') handle = device.get_cusparse_handle() m = x.shape[0] nnz = len(x.data) row = cupy.empty(nnz, 'i') cusparse.xcsr2coo( handle, x.indptr.data.ptr, nnz, m, row.data.ptr, cusparse.CUSPARSE_INDEX_BASE_ZERO) # data and indices did not need to be copied already return cupyx.scipy.sparse.coo_matrix( (data, (row, indices)), shape=x.shape)
def csc2coo(x, data, indices): """Converts a CSC-matrix to COO format. Args: x (cupyx.scipy.sparse.csc_matrix): A matrix to be converted. data (cupy.ndarray): A data array for converted data. indices (cupy.ndarray): An index array for converted data. Returns: cupyx.scipy.sparse.coo_matrix: A converted matrix. """ handle = device.get_cusparse_handle() n = x.shape[1] nnz = len(x.data) col = cupy.empty(nnz, 'i') cusparse.xcsr2coo(handle, x.indptr.data.ptr, nnz, n, col.data.ptr, cusparse.CUSPARSE_INDEX_BASE_ZERO) # data and indices did not need to be copied already return cupyx.scipy.sparse.coo_matrix((data, (indices, col)), shape=x.shape)