如何在预先存在的3个标准压缩行/列数组上包装Eigen::SparseMatrix

How to wrap Eigen::SparseMatrix over preexistant 3-standard compress row/colum arrays

本文关键字:数组 包装 SparseMatrix Eigen 压缩 存在 标准 3个      更新时间:2023-10-16

注意:我已经问了这个问题,但由于"太宽泛"而没有太多解释,所以它被关闭了。我看不出这个问题怎么会更具体(它涉及特定用途的特定库的特定类…),所以我认为这有点像"主持人的错误",然后再问一遍。。。

我想在稀疏矩阵上使用本征进行稀疏矩阵/矩阵乘法。这些矩阵已经在我正在使用的标准3阵列压缩行/列存储的代码中定义。

然后,我想使用Eigen::SparseMatrix类作为这些数组的包装器(假设内部Eigen使用这样的3数组存储),以避免在内存中重复矩阵。我想做以下事情:

Eigen::SparseMatrix smin0(n,m);
Eigen::SparseMatrix smin1(m,l);
Eigen::SparseMatrix smout(n,l);
smin0.set_innerPtr(myInnerPtr0);
smin0.set_outerPtr(myOuterPtr0);
smin0.set_valuePtr(myValuePtr0);
smin1.set_innerPtr(myInnerPtr1);
smin1.set_outerPtr(myOuterPtr1);
smin1.set_valuePtr(myValuePtr1);
smout=smin0*smin1;
int *myOutInnerPtr=smout.innerIndexPtr();
int *myOutOuterPtr=smout.outerIndexPtr();
double *myOutValuePtr=smout.valuePtr();

这可能吗?如果可能,怎么做?

非常感谢

正如ggael所指出的,您可以使用Eigen::MappedParseMatrix来实现这一点。

不能只覆盖SparseMatrix的内部指针的原因是,当SparseMatrix释放它们时,这会导致问题,但您以与Eigen不同的方式分配它们(Eigen如何内部分配内存是代码中不应该真正依赖的实现细节)。