j'ai un vecteur VEC et je veux obtenir un nouveau vec2 « d'expression » en copiant les valeurs le long de la dimension du vecteurEigen: répliquent les éléments le long d'une dimension sans allocations inutiles
Eigen::VectorXf vec(5);
vec << 1, 2, 3, 4, 5;
const auto vec2 = vec.someAwesomeEigenMagic<3>();
//vec2 should contains (1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5)^T
//Not (1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5)^T
Bien sûr, je peux créer un tel vecteur manuellement ou en utilisant répliquées + vectorisation par Eigen :: Carte:
MatrixXf tmp = vec.replicate(1, 3).transpose();
const Map<VectorXf> vec2(tmp.data(), vec.rows() * 3, 1);
Mais je veux vec2
être une sorte de « modèle d'expression eigen » sans allication (vEC peut être assez grand et je vais appeler cette routine assez souvent) et le calcul immédiat des valeurs. (vec contient des poids par vertex et je veux l'utiliser pour les moindres carrés pondérés)
J'ai pensé à l'astuce du produit kronecker avec le vecteur de ceux, mais je ne suis pas sûr qu'il est optimisé pour le produit par ceux. Je préfère également éviter le module non pris en charge
PS Désolé pour mon anglais
Merci pour votre réponse! Ça a l'air génial. Juste deux questions - ArrayXi :: LinSpaced n'alloue rien? Et est-ce stable? –
aucune allocation du tout. – ggael