Mex稀疏矩阵

时间:2011-05-25 06:19:07

标签: c matlab sparse-matrix mex

我使用mxCreateSparse在MEX中创建了一个稀疏矩阵。

mxArray *W;
W=mxCreateSparse(n*n,n*n,xsize,mxREAL);
double *wpoint;
wpoint=mxGetPr(W);
for(p=0;p<xsize;p++)
 {
     Wpoint[(returnindex1(xi[p][0],xi[p][1])-1)*n*n + (returnindex1(xj[p][0],xj[p][1]))]=   exp(-df[p]/(SIGMAI*SIGMAI)) * exp(-dx[p]/(SIGMAJ*SIGMAJ));
 }

来自(returnindex1(xi[p][0],xi[p][1])-1)*n*n + (returnindex1(xj[p][0],xj[p][1]))的最大值为n*n*n*n,我创建了维度(n*n)X(n*n)的稀疏矩阵

当我显示整个矩阵时,一些零元素就像垃圾一样。 同样,对于较大的n值,分段错误发生在wpoint

1 个答案:

答案 0 :(得分:0)

pr数组包含xsize个元素,并且您使用越界索引访问数组。因此违反了seg。

我认为你的基本问题是你还没有完全掌握MATLAB中稀疏矩阵的存储方式。我不是MATLAB实现细节的专家,但我的回忆是它使用压缩列存储。

本质上有3个数组如下:

  • double pr[NZMAX],其中包含NZMAX非零值。
  • int ir[NZMAX],其中包含pr中每个值的行号。
  • int jc[m]索引为prir,用于标识每个m列中的第一项。

这是执行摘要,但我建议您仔细阅读详细信息。