matlab csc,matlab - 从Matlab CSC转换为CSR格式 - 堆栈内存溢出

我最终使用CUSP库将Matlab中的CSC格式从Matlab转换为CSR,如下所示。

从matlab获取矩阵A之后,我得到了row , col和values矢量,然后将它们复制到分别为它们创建的thrust::host_vector中。

之后,我创建了两个Indices和Values类型的cusp::array1d ,如下所示。

typedef typename cusp::array1dIndices;

typedef typename cusp::array1dValues;

Indices row_indices(rows.begin(),rows.end());

Indices col_indices(cols.begin(),cols.end());

Values Vals(Val.begin(),Val.end());

其中rows , cols和Val是我从Matlab获得的thrust::host_vector 。

之后,我创建了一个cusp::coo_matrix_view ,如下所示。

typedef cusp::coo_matrix_viewHostView;

HostView Ah(m,n,NNZa,row_indices,col_indices,Vals);

其中m , n和NNZa是我从稀疏矩阵的mex函数获得的参数。

我将此视图矩阵复制到设备存储器中的cusp::csr_matrix ,并按如下所示设置了适当的尺寸。

cusp::csr_matrixCSR(m,n,NNZa);

CSR = Ah;

之后,我仅使用thrust::raw_pointer_cast将此CSR矩阵的三个单独的内容数组复制回主机,其中具有适当尺寸的数组已按如下所示进行mxCalloc分配。

cudaMemcpy(Acol,thrust::raw_pointer_cast(&CSR.column_indices[0]),sizeof(int)*(NNZa),cudaMemcpyDeviceToHost);

cudaMemcpy(Aptr,thrust::raw_pointer_cast(&CSR.row_offsets[0]),sizeof(int)*(n+1),cudaMemcpyDeviceToHost);

cudaMemcpy(Aval,thrust::raw_pointer_cast(&CSR.values[0]),sizeof(float)*(NNZa),cudaMemcpyDeviceToHost);

希望这对在Matlab使用CUSP人有用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值