假設你有一個矩陣A
:是否有可能在不復制的情況下將特徵矩陣變平?
1 2
3 4
有兩個削平:
1
2
3
4
和
1
3
2
4
如果使用默認值(ColMajor
)存儲類型,我們可以得到後者爲
VectorXd v = Map<const VectorXd>(A.data(), A.size())
這隻會複製一次數據。
但要獲得前者,我能想到的最好的是
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
使用映射函數'(row,col) - > vector_ix'(或逆向vector_ix - >(row,col)'和for-cycle-in inline inline void flatten(const MatrixXd&src ,(VectorXd&dest,direct_mapper_func&f = line_major_direct)'(迭代src行/ col)或'inline void flatten(const MatrixXd&src,VectorXd&dest,inverse_mapper_func&f = line_major_inverse)'(迭代dest ix)使用像'三角'規則[用於證明有理數是可數](http://www.homeschoolmath.net/teaching/rational-numbers-countable.php) –