使用 EIGEN_MATRIXBASE_PLUGIN 访问特征中的模板值
Accessing Template values in Eigen using EIGEN_MATRIXBASE_PLUGIN
我目前正在尝试调整Eigen API以支持以下功能:
矩阵相似性(similarityTransformationMatrix);
它只是执行以下操作:
similarityTransformationMatrix * matrix * similarityTransformationMatrix.transpose();
我之前的实现只允许对两者采用平方矩阵:
inline MatrixBase< Derived > similarity( const MatrixBase< Derived >& m) const {
MatrixBase< Derived > t = m;
t.transposeInPlace();
return m*(*this)*t;
}
相反,我需要能够在(正方形,但检查 cols = 不需要行)矩阵上调用它,以及相似性不同维度的转换。我的问题是返回矩阵不属于其中任何一个的类型,但它可以导出:
Matrix< double, similarityTransformation.rows(), similarityTransformation.rows()>
你能给我一些如何实现这一点的指示吗?我没有尝试将其实现为Eigen::Matrix,但如果可能的话,我宁愿坚持使用MatrixBase,但是MatrixBase不想接受表单返回类型的多个参数
MatrixBase< OtherDerived::Scalar, OtherDerived::RowsAtCompileTime, OtherDerived::RowsAtCompileTime>
首先,您应该注意,您无法创建类型为 MatrixBase<...>
的对象。 MatrixBase
只是一个抽象的基类。在您的情况下,t
和similarity
的返回类型应该是Matrix<...>
对象。
其次,Matrix<...>
的模板参数必须在编译时知道。这意味着您不能将similarityTransformation.rows()
用于该目的,而可以使用 TYPEOF_similarityTransformation::RowsAtCompileTime
。
第三,您的similarity()
方法必须模板化以接受任何其他特征表达式。
这里有一个建议:
template<typename OtherDerived>
Matrix<Scalar, OtherDerived::RowsAtCompileTime, OtherDerived::RowsAtCompileTime>
similarity(const MatrixBase<OtherDerived>& S) const
{
return S * ( this->derived() * S.adjoint() );
}
这个例子可以进一步扩展,以支持将实数与复合物混合......(只有Scalar
必须更改为更复杂的类型升级..)
相关文章:
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 用于访问容器<T>数据成员的正确 API
- 访问者访问变体并返回不同类型时出错
- 尝试通过多个向量访问变量时,向量下标超出范围
- 无法访问嵌套类.类的使用无效
- Eigen如何在容器循环中干净地附加矩阵
- 写入位置0x0000000C时发生访问冲突
- 我们可以访问一个不存在的联盟的成员吗
- C++从另一个类访问公共静态向量的正确方法是什么
- 当在带有Eigen的C++中使用GDB时,我如何才能看到更多的大矩阵
- 我的简单if-else语句是如何无法访问的代码
- eigen :: Tensor,如何从张量访问矩阵
- 随机(只读)访问 Eigen::SparseVector 的元素
- Eigen SparseLU解决错误读取访问冲突,这>m_sup_to_col被0x111011101110112
- C eigen ::通过上课后无法访问矩阵
- C++从张量流::张量对象访问Eigen::张量类函数
- Eigen:访问ProductBase系数
- 在访问Eigen::VectorXd时使用0作为第二个索引是否安全?