0

有一个 Eigen::MatrixBase & 数据,有什么办法可以得到它是浮点矩阵还是双精度矩阵?我需要创建一个与 MatrixBase 大小和类型相同的新复杂矩阵。

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

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

2 回答 2

2

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

template <typename A>
int dowork(const Eigen::MatrixBase<A>& data) {
    typedef Matrix<std::complex<typename A::RealScalar, Dynamic, Dynamic> MatCplx;
    ...
于 2013-03-01T08:55:11.487 回答
0

我不是 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

于 2013-03-01T02:48:10.767 回答