あなたが行列A
があるとします。コピーせずに固有行列を平坦化することはできますか?
1 2
3 4
2つの扁平あります
1
2
3
4
と
1
3
2
4
がデフォルト(ColMajor
)ストレージタイプを使用する場合は、我々が得ることができます後者は
VectorXd v = Map<const VectorXd>(A.data(), A.size())
これはデータを1回のみコピーします。元を取得するしかし
は、私は考えることができる最善のは、残念ながら、二回MatrixXd At = A.transpose()
VectorXd v = Map<const VectorXd>(At.data(), At.size())
このコピーデータです。
はやや紛らわしい(私には少なくとも)
VectorXd v = Map<const VectorXd>(A.transpose().data(), A.size())
コンパイル、そこtranspose
を有さないように、完全に同一の結果を生成します。
参照:Eigen Convert Matrix to Vector
インラインvoid flatten(const MatrixXd&src)のマッピング関数 '(row、col) - > vector_ix'(または逆の' vector_ix - >(row、col) 'およびfor-cycle-ingを使用すると、 (MatrixXd&src、VectorXd&dest、inverse_mapper_func&f = line_major_inverse) '(およびdest ixを反復処理する)?有理数を証明するのに使用されるような '三角形'の規則を使用して(http://www.homeschoolmath.net/teaching/rational-numbers-countable.php) –