gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:52:02 28 4
gpt4 key购买 nike

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

我想在稀疏矩阵上使用 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();

是否可能,如果可能,如何?

非常感谢

最佳答案

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

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

关于c++ - 如何将 Eigen::SparseMatrix 包装在预先存在的 3 标准压缩行/列数组上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26777017/

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