如何在犰狳中更新稀疏矩阵的值

Posted

技术标签:

【中文标题】如何在犰狳中更新稀疏矩阵的值【英文标题】:How to Update values of a sparse matrix in Armadillo 【发布时间】:2015-07-07 13:25:48 【问题描述】:

我正在解决一个流体问题,其中形成了非常大的稀疏矩阵。在犰狳稀疏矩阵的上下文中,我有一个固定的umat locations 存储索引矩阵和一个变量vec values 用于每个位置。在迭代开始之前,我创建了一个稀疏矩阵,其中犰狳为sp_mat A(locations, values)。在每次迭代中,我需要解决不同的valueslocations 保持不变,我希望更新A 中的值。

有什么方法可以更新A 中的values,用batch insertion 替换旧的,或者Arm​​adillo 中提供的任何类似方法?如果不是,那么在 Speed 的背景下,最好的方法是什么?

元素访问,A(i,j),是可能的,但由于尺寸很大,它会减慢进程。批量插入似乎更快且易于管理。

非常感谢!

【问题讨论】:

【参考方案1】:

使用 C++11 / C++14,您可以将batch insertion constructors 与std::move() 结合使用。例如:

sp_mat X;

X = std::move( sp_mat(locations, values) );

要在 gccclang 中启用 C++11 模式,请使用 -std=c++11 选项进行编译。

【讨论】:

以上是关于如何在犰狳中更新稀疏矩阵的值的主要内容,如果未能解决你的问题,请参考以下文章

使用 Rcpp 通过引用传递犰狳稀疏矩阵

犰狳中是不是有类似稀疏立方体的东西,或者使用稀疏矩阵作为立方体中的切片的某种方式?

将犰狳中的矩阵从稀疏转换为密集(spmat 到 mat)

C++犰狳稀疏矩阵类型转换

使用 Rcpp 代码访问和修改 arma::sp_mat 类稀疏矩阵的非零元素

犰狳中的稀疏 svd (C++)