可以获得Eigen :: MatrixBase <t>&amp; </t>的类型

时间:2013-03-01 01:35:46

标签: c++ eigen

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

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

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

2 个答案:

答案 0 :(得分:1)

这很简单,只需使用A :: RealScalar typedef来构建复杂类型:

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

答案 1 :(得分:0)

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

如果没有,因为您正在使用模板类,所以您有很多自由,可以使用通用模板数据类型。还要考虑使用矢量格式表示矩阵以便于使用。甚至可能是稀疏格式的东西

// 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