可以得到特征的类型::MatrixBase<T> &

Possible to get type of Eigen::MatrixBase<T> &

本文关键字:MatrixBase gt lt 类型 特征      更新时间:2023-10-16

font =宋体;数据,有没有办法得到如果它是一个浮点或双矩阵?我需要创建一个与MatrixBase相同大小和类型的新复杂矩阵。

如果它是MatrixXf那么我需要创建MatrixXcf,如果MatrixXd我需要MatrixXcD。

template <typename A>
        int dowork(const Eigen::MatrixBase<A>& data)

这很简单,只需使用A::RealScalar类型定义来构建您的复杂类型:

template <typename A>
int dowork(const Eigen::MatrixBase<A>& data) {
    typedef Matrix<std::complex<typename A::RealScalar, Dynamic, Dynamic> MatCplx;
    ...

我不是100%确定我理解被问到的问题,但我认为你要求在满足某些条件后分配相同时间类型的另一个矩阵?您是否希望这个新矩阵不允许与类型不匹配的数据类型?

如果没有,因为你使用的是模板类,你有很大的自由,可以只使用一般的模板数据类型。为了便于使用,还可以考虑使用矢量格式表示矩阵。甚至可能是像这样的稀疏格式

// Local variables used.
int a = 0;
int b = 0;
int endN, endM;
// Iterates through matrix checking when last matrix value is reached for end point.
while (endN != sizeN && endM != sizeM) {
    if (a == sizeN) {
        b++;
        a = 0;
        endM = b;
    } else {
        if (Matrix[a][b] != 0) {
            // Stores non-zero matrix values in queue SpareseFormat.
            SparseFormat.push(a);
            SparseFormat.push(b);
            SparseFormat.push(Matrix[a][b]);
        }
        endN = a;
        a++;
    }
}
如果我完全没有理解你的问题,我很抱歉。P