Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在MEX中创建稀疏矩阵_C_Matlab_Sparse Matrix_Mex - Fatal编程技术网

C 在MEX中创建稀疏矩阵

C 在MEX中创建稀疏矩阵,c,matlab,sparse-matrix,mex,C,Matlab,Sparse Matrix,Mex,如何在用C编写的MEX文件中创建2d稀疏矩阵。创建矩阵后,如何像在C中一样单独访问元素,例如mat[i][j] 我厌倦了使用函数,但我无法访问元素,也无法将其作为稀疏矩阵 请帮助然后您将要查看和相应的“获取”版本 我意识到这是一个古老的链接,但据我所知,它没有改变 基本上,ir数据包含行索引。jr数据包含ir数组中的索引列表。例如,在关于如何分配稀疏矩阵的链接中,代码: ... static double static_pr_data[NZMAX] = {5.8, 6.2, 5.9, 6.1}

如何在用C编写的MEX文件中创建2d稀疏矩阵。创建矩阵后,如何像在C中一样单独访问元素,例如
mat[i][j]

我厌倦了使用函数,但我无法访问元素,也无法将其作为稀疏矩阵

请帮助

然后您将要查看和相应的“获取”版本

我意识到这是一个古老的链接,但据我所知,它没有改变

基本上,
ir
数据包含行索引。
jr
数据包含
ir
数组中的索引列表。例如,在关于如何分配稀疏矩阵的链接中,代码:

...
static double  static_pr_data[NZMAX] = {5.8, 6.2, 5.9, 6.1};
static int     static_ir_data[NZMAX] = {0, 2, 1, 3};
static int     static_jc_data[COLS+1] = {0, 2, 4};
...
数组
static_jc_data
告诉您索引
static_jc_data[c]
通过
static_jc_data[c+1]-1
static_pr_data
static_ir_data
对应于矩阵的列
c
。在该范围内(
static_jc_data[c]
static_jc_data[c+1]-1
)static_pr_data的条目提供矩阵中的值,
static_ir_data
提供正确的行

例如,这里的矩阵是:

A = [ 5.8  0
      0    5.9
      6.2  0
      0    6.1];
要回答有关如何单独访问元素的问题,必须搜索
i,j
th元素是否存在,如果它确实返回它,否则返回0。为此,您可以从
static\u ir\u data[static\u jc\u data[j]]
static\u ir\u data[j+1]-1]
进行搜索,以查看您的
i
是否存在。如果是,则
静态\u pr\u数据
中的相应条目将包含您的条目。如果没有,则返回0

但是,通常在使用稀疏矩阵时,如果要在矩阵中进行大量搜索以查看某个元素是否存在,则可能需要考虑如何使用它。通常,执行您正在执行的任何操作时,最好只遍历非零元素一次,而不是搜索每个
i,j
th条目


哦,还有最后一件事。请记住,在MEX代码中,所有索引都是基于0的,但在MATLAB中它们是基于1的。这应该会增加乐趣。

我理解你的例子,但我不知道如何创建jc数组。问题是我必须制作一个2d矩阵,通过一些计算在其中填充某些位置的值。比如w[1][2]=一些公式。。现在我必须创建一个包含所有非零元素的prdata数组吗?Jc数组比列数多一个。它是迄今为止列中非零元素数量的累积和。这使我们能够有效地确定给定列中元素的数量。@pxu-如果您仔细考虑,这与我所说的完全一致。它是。只是想用一句话来回答rohit的问题。我个人不喜欢在mex中使用Matlab稀疏矩阵。如果您关心性能,请使用CSparse和std::map之类的库对键进行排序。+1在MEX中的稀疏矩阵上写得很好。我希望我能不止一次投票。。。