2

注意:我已经问过这个问题,但由于“太宽泛”而没有太多解释而被关闭。我看不出这个问题如何更具体(它针对特定用途处理特定库的特定类......),所以我认为这类似于“版主的错误”并再次询问。 ..

我想在稀疏矩阵上使用 Eigen 执行稀疏矩阵/矩阵乘法。这些矩阵已经在我正在处理的标准 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();

有可能吗?如果可以,怎么做?

非常感谢

4

1 回答 1

0

正如 ggael 指出的那样,您可以为此使用Eigen::MappedSparseMatrix

您不能只覆盖 a 的内部指针的SparseMatrix原因是,这会在SparseMatrix释放它们时引起问题,但是您以与 Eigen 不同的方式分配它们(以及 Eigen 如何在内部分配内存是一个实现细节,您不应该真的依赖于您的代码)。

于 2016-09-25T10:35:56.237 回答