2016-08-17 4 views
0

Y at-il un mécanisme de copie efficace entrecopie efficace/coulée de grande matrice std :: vector <std :: vector <double>> et Armadillo arma :: tapis

  std::vector<std::vector<double>> std_mat 
      arma::mat arma_mat 

où arma :: tapis arma_mat fait référence à tatou bibliothèque matricielle/mathématique.

http://arma.sourceforge.net/

Mon projet dépend de deux bibliothèques d'acquisition matrice/données distinctes où la matrice est définie comme ci-dessus, respectivement. Cependant, à certains stades du pipeline de traitement, j'ai besoin de copier l'un à l'autre pour éviter de casser le code existant. Je me demande s'il y a une sorte d'opérateur de casting de l'un à l'autre (donc nous n'avons pas besoin de copier) ou sinon, un mécanisme de copie efficace (quelque chose de similaire au concept vector.emplace_back). En ce moment j'utilise un double pour la boucle mais je crois que cela peut être plus efficace.

Répondre

2

Vous pouvez probablement éviter la copie en modifiant un peu la façon dont vous utilisez vos vecteurs/mémoire.

Si vous regardez le documentation

mat(ptr_aux_mem, n_rows, n_cols, copy_aux_mem = true, strict = false)

Créer une matrice en utilisant les données de la mémoire auxiliaire inscriptible (externe), où ptr_aux_mem est un pointeur vers la mémoire. Par défaut, la matrice alloue sa propre mémoire et copie les données de la mémoire auxiliaire (pour plus de sécurité). Cependant, si copy_aux_mem est défini sur false, la matrice utilisera directement la mémoire auxiliaire (c'est-à-dire pas de copie ); C'est plus rapide, mais peut être dangereux à moins que vous ne sachiez ce que vous êtes en train de faire !

Si vous savez que votre matrice a une taille fixe, vous pouvez construire un mat en fournissant un morceau de mémoire. Veillez à ce que la documentation indique que:

éléments sont stockés avec la commande de colonne principale (c.-à-colonne par colonne.)

+0

-ce que les majors de colonnes contiguës ou sur le tas? Contiguë le rendra facile je suppose. Merci pour le conseil. Je vais regarder dans la documentation détaillée. – Pal

+0

semble contigu, mieux vaut jeter un oeil à la docs :) –