0

Eigen::MatrixBase とデータを持っていますが、それがフロートまたはダブル マトリックスであるかどうかを取得する方法はありますか? MatrixBase と同じサイズとタイプの新しい複雑なマトリックスを作成する必要があります。

MatrixXf の場合は MatrixXcf を作成する必要があり、MatrixXd の場合は MatrixXcD が必要です。

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

2 に答える 2

2

これは非常に簡単です。A::RealScalartypedefを使用して複合型を構築するだけです。

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 に答える