c++ - Eigen C++:为稀疏矩阵映射原始缓冲区
问题描述
我在为 SparseMatrix 映射原始缓冲区时遇到了一些麻烦。
1 - 使用以下代码的非稀疏矩阵案例没有问题:
Eigen::MatrixXd DIFFXX;
new (&DIFFXX) Eigen::Map<Eigen::MatrixXd> (&coeff_diffxx(0,0), coeff_diffxx.xsize(), coeff_diffxx.ysize());
2- 当我想对 SparseMatrix 执行相同类型的操作时失败了
i) 这样:得到的 MAA 是完全错误的
Eigen::SparseMatrix<double, Eigen::RowMajor> MAA;
new (&MAA) Eigen::Map< Eigen::SparseMatrix<double, Eigen::RowMajor>> (xsize*ysize, xsize*ysize, 3*xsize*ysize, tridiagonalMatrix.outerIndexPtr(), tridiagonalMatrix.innerIndexPtr(), &m_a.m_data[1]);
ii) 或者这样:MAA 不是引用&m_a.m_data[1]
而是复制它!
Eigen::SparseMatrix<double, Eigen::RowMajor> MAA = Eigen::Map< Eigen::SparseMatrix<double, Eigen::RowMajor>> (xsize*ysize, xsize*ysize, 3*xsize*ysize, tridiagonalMatrix.outerIndexPtr(), tridiagonalMatrix.innerIndexPtr(), &m_a.m_data[1]);
我的目标是在 C++ 原始缓冲区上使用稀疏(实际上是三对角线)矩阵执行操作。
感谢您的任何提示。卢克
解决方案
我终于用MappedSparseMatrix类做到了,这样:
int outerPtr[] = {0,2};
int innerPtr[] = {1,2};
double valsPtr[] = {2.5,3.6};
Eigen::MappedSparseMatrix<double, Eigen::ColMajor, int> mat(5,1,2,outerPtr,innerPtr,valsPtr);
谢谢 !
推荐阅读
- rest - 序列化异步回调
- visual-studio-code - 使用多个光标时选择下一个出现的单词
- android - 如何从不同的根项目导入 Gradle 模块?
- r - 整合概率密度的平方?
- json - 配置 microsoft 团队传入的 webhook json 有效负载
- reactjs - 如何更新 Webview 字体系列和大小
- image - 使用扩展小部件时无法更改图像的高度
- python - Python:RuntimeWarning:在 byte_scalars 中遇到溢出
- flutter - 如何清除flutter中的外部堆内存?
- javascript - 必应地图地形叠加无法读取未定义的属性“set_style”