我正在嘗試以下操作:
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);
根據本征檔案
允許使用稀疏矩陣和向量積。我究竟做錯了什么?
uj5u.com熱心網友回復:
問題是您的產品輸出型別錯誤。
Eigen 檔案指出定義了以下型別的乘法:
dv2 = sm1 * dv1;
稀疏矩陣乘以密集向量等于密集向量。
如果您確實需要稀疏表示,我認為沒有比執行上述乘法然后將乘積轉換為具有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();
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/350504.html
