gpt4 book ai didi

在 MEX 中创建稀疏矩阵

转载 作者:太空狗 更新时间:2023-10-29 17:20:10 25 4
gpt4 key购买 nike

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

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

请帮忙

最佳答案

See this page on mxCreateSparse.然后你会想看看mxSetPr , mxSetIrmxSetJc以及相应的“获取”版本。

Here's an example of how to allocate a sparse matrix.我知道这是一个旧链接,但据我所知,它没有改变。

基本上,how it works 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]-1static_pr_datastatic_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 元素是否存在,如果存在则返回它,否则返回 0。为此,您将从 static_ir_data[static_jc_data[j]] 搜索到 static_ir_data[static_jc_data[j+1]-1] 以查看您的 i 是否存在.如果是,则 static_pr_data 中的相应条目将包含您的条目。如果没有,则返回 0。

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

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

关于在 MEX 中创建稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6095548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com