c - Mex 稀疏矩阵

标签 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

最佳答案

pr 数组包含 xsize 元素,并且您访问该数组时索引超出范围。因此出现段违规。

我认为你的根本问题是你没有完全掌握稀疏矩阵在 MATLAB 中是如何存储的。我不是 MATLAB 实现细节方面的专家,但我记得它使用压缩列存储。

本质上有3个数组如下:

  • double pr[NZMAX] 包含 NZMAX 非零值。
  • int ir[NZMAX] 包含pr中每个值的行号。
  • int jc[m] 索引到 prir 中,标识每个 m 中的第一个项目> 专栏。

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

关于c - Mex 稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6120319/

相关文章:

matlab - 使绘图和图像中的颜色相同

matlab - 使用 C++ 中的 "engine.h"在 Matlab 中绘制四元数

python - scipy.sparse.csr_matrix 如果不​​为零则替换值

使用结构接口(interface)和附加 C 文件在 main 中调用 C 函数

c - 声明数组和使用 malloc 时出现 ISO C90 错误

c - 无法从客户端连接到套接字

java - 32 位 Linux (Xubuntu 14.04) 上的 MATLAB 2013 安装

machine-learning - python中适合稀疏高维特征的理想分类器(具有层次分类)

c - 在 C 中生成稀疏矩阵

c - Lua中返回C指针时返回lua_integer类型而不是lightuserdata可以吗?