2
によって(ブロードキャスト)複製Iは、(ビューを作成することによって)生じる任意コピーせずに行列M
の各行を複製したい:固有:行
0 1 0 1
2 3 -> 0 1
2 3
2 3
M.rowwise().replicate(n)
がためshorcutありますM.replicate(1,n)
は役に立たないようです。次のスニペットはコピーを行い、
M
が式の場合は動作しません。いくつかの状況では
Eigen::Index rowFactor = 2; Eigen::MatrixXi M2 = Eigen::Map(M.data(), 1, M.size()).replicate(rowFactor, 1); M2.resize(M.rows()*rowFactor, M.cols()) ;
- 、私は他のオペランドを再形成することにより、中間ビュー
Eigen::Map<Eigen::MatrixXi>(M.data(), 1, M.size()).replicate(rowFactor, 1)
を使用することができますが、それは非常に満足ではありません。
このブロードキャストビューを達成する適切な方法はありますか?
一時的なベクトルと乗算が使用されますが、うまく解決します。この商品が遅れているかどうかを確認する必要があります。 – YvesgereY
'Vector2i :: Ones()'は明示的に生成されません。実際には乗算が行われますが、少なくとも整数の場合、コンパイラはそれを最適化することができると確信しています。乗算が発生しないことを100%確実にしたい場合は、KroneckerProductの実装を見てください。 – chtz
あなたはそうです。動的バージョン 'VectorXi :: Ones(size) 'でも最適化された'定数 'ベクトルが返されます。 – YvesgereY