我使用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
。
答案 0 :(得分:0)
pr
数组包含xsize
个元素,并且您使用越界索引访问数组。因此违反了seg。
我认为你的基本问题是你还没有完全掌握MATLAB中稀疏矩阵的存储方式。我不是MATLAB实现细节的专家,但我的回忆是它使用压缩列存储。
本质上有3个数组如下:
double pr[NZMAX]
,其中包含NZMAX
非零值。int ir[NZMAX]
,其中包含pr
中每个值的行号。int jc[m]
索引为pr
和ir
,用于标识每个m
列中的第一项。这是执行摘要,但我建议您仔细阅读详细信息。