如何在预先存在的3个标准压缩行/列数组上包装Eigen::SparseMatrix
How to wrap Eigen::SparseMatrix over preexistant 3-standard compress row/colum arrays
注意:我已经问了这个问题,但由于"太宽泛"而没有太多解释,所以它被关闭了。我看不出这个问题怎么会更具体(它涉及特定用途的特定库的特定类…),所以我认为这有点像"主持人的错误",然后再问一遍。。。
我想在稀疏矩阵上使用本征进行稀疏矩阵/矩阵乘法。这些矩阵已经在我正在使用的标准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如何内部分配内存是代码中不应该真正依赖的实现细节)。
相关文章:
- std::vector的包装器,使数组的结构看起来像结构的数组
- 通过Overloading Operator []访问自定义数组包装器中的元素
- std::在类包装器实例化时设置的数组大小
- 在C++中,为什么要重载"const char 数组"上的函数和包装"const char
- 使用 C++/CLI 包装器将 2D 数组从 C# 传递到非托管C++
- C++ DLL 包装器 vb.net 传递字节数组的字节数组?
- 将 C 对象的数组包装到类C++
- 如何为包装容器的模板类编写构造函数,其中容器可以是数组或向量
- 在匿名结构中包装灵活数组时,MSVC结构布局是否更改
- MATLAB LECACY_CODE工具 - 编写包装器功能以捕获数组
- 短数组的 JNI 包装器定义
- 在 Boost Python 中包装数组
- 如何在预先存在的3个标准压缩行/列数组上包装Eigen::SparseMatrix
- 为什么分配给AVX矢量包装类对象数组的元素会引发访问违规错误
- 使用BoostPython将C++数组包装成numpy数组
- 用std::类似向量的构造函数对C数组进行Constexpr包装
- 生成的静态数组的包装器宏
- c++数组包装器
- c++中的数组包装器类
- 运算符重载 - 在 char 数组包装类中实现 C++ setter 的正确方法是什么