2017-07-17 64 views
0

Eigen::Stride文檔:零步幅奇怪徵地圖行爲

內步幅是一個行優先矩陣的一個給定行內或一個給定的 列內的兩個連續 項之間的指針增量列主矩陣。

外跨度是行主矩陣的兩個連續行 之間或列主矩陣的兩個連續列之間的指針增量。

假設我想創建一個由重複向量組成的矩陣。在python numpy中,我可以使用零長度來執行此操作。艾根文件說一無所知零的進步,但看起來的行爲很奇怪:

typedef Matrix<float, Dynamic, Dynamic, RowMajor> MatrixType; 

MatrixType M1(3, 3); 
M1 << 1, 2, 3, 
     4, 5, 6, 
     7, 8, 9; 

Map<MatrixType, 0, Stride<0, 0>> zeroMap(M1.data(), 2, 2); 
Map<MatrixType, 0, Stride<2, 0>> oneMap(M1.data(), 2, 2); 

cout << "Row stride = 0:" << "\n"; 
cout << zeroMap << "\n" << "Row stride = 2:" << "\n"; 
cout << oneMap; 
cout << "\n"; 

返回相同的結果在兩種情況下:

Row stride = 0: 
1 2 
3 4 
Row stride = 2: 
1 2 
3 4 

爲什麼結果與步幅0和步幅2一樣的嗎?

回答

2

編譯時的跨度爲0意味着Eigen中的「自然跨度」。如果你想重複一個矢量多次,你應該使用.replicate()功能:

M1.row(0).replicate<3,1>(); 

也看看.rowwise().replicate().colwise().replicate(),每個模板參數或(取決於你的實際需要)運行時參數。