gpt4 book ai didi

c++ - 如何将稀疏矩阵和密集 vector 相乘?

转载 作者:行者123 更新时间:2023-12-01 23:11:34 26 4
gpt4 key购买 nike

我正在尝试以下操作:

Eigen::SparseMatrix<double> bijection(2 * face_count, 2 * vert_count);
/* initialization */
Eigen::VectorXd toggles(2 * vert_count);
toggles.setOnes();
Eigen::SparseMatrix<double> deformed;
deformed = bijection * toggles;

Eigen 正在返回一个错误声明:

 error: static assertion failed: THE_EVAL_EVALTO_FUNCTION_SHOULD_NEVER_BE_CALLED_FOR_DENSE_OBJECTS
586 | EIGEN_STATIC_ASSERT((internal::is_same<Dest,void>::value),THE_EVAL_EVALTO_FUNCTION_SHOULD_NEVER_BE_CALLED_FOR_DENSE_OBJECTS);

根据eigen documentaion

允许稀疏矩阵和 vector 积。我做错了什么?

最佳答案

问题是您的产品输出类型错误。

Eigen 文档指出定义了以下类型的乘法:

dv2 = sm1 * dv1;

稀疏矩阵乘以稠密 vector 等于稠密 vector 。

如果您确实需要稀疏表示,我认为没有比执行上述乘法然后使用 sparseView 成员函数将乘积转换为稀疏矩阵更好的方法了。例如

Eigen::SparseMatrix<double> bijection(2 * face_count, 2 * vert_count);
/* initialization */
Eigen::VectorXd toggles(2 * vert_count);
toggles.setOnes();
Eigen::VectorXd deformedDense = bijection * toggles;
Eigen::SparseMatrix<double> deformedSparse = deformedDense.sparseView();

关于c++ - 如何将稀疏矩阵和密集 vector 相乘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69831837/

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