J'écris un code dans lequel la réduction de la vitesse et du temps est vraiment importante. Je dois créer des matrices en répétant certains vecteurs. Comme mes vecteurs sont presque grands, utiliser repmat pour créer ces matrices prend relativement longtemps. Y a-t-il un autre moyen de réduire ce temps?Alternative de repmat pour les grands vecteurs dans matlab
Répondre
Notre vecteur de test:
V0 = [1; 2; 3];
trick Tony:
V1 = V0(:, ones(3,1))
La multiplication de matrices/vecteur:
V2 = V0 * ones(1,3);
produit Kronecker:
V3 = kron(V0, ones(1,3))
Concaténation:
V4 = [V0 V0 V0]
façon Inobvious:
V5 = arrayfun(@(~)V0, 1:3, 'uniformoutput', false);
V5 = cat(2, V5{:});
La façon la moins évidente:
[Vi{1:3}] = deal(V0);
V6 = [Vi{:}]
Utilisez repmat
du Lightspeed toolbox.
Ou, la meilleure façon, utiliser l'expansion implicite (R2008 et plus):
%# NOTE: this PREVENTS having to do explicit replication, and carries
%# out the multiplication re-using the same elements from V0:
M = bsxfun(@times, rand(1,5), V0)
Pour le dernier je m'attendrais 'ones (1,5)' ou 'ones (3,5)'. Petit sidenote pour le demandeur: peut-être pas toutes ces méthodes se révélera plus rapide que repmat. –
@DennisJaheruddin: le dernier est de montrer que vous n'avez pas besoin du vecteur explicitement répliqué, mais que vous pouvez effectuer n'importe quelle multiplication/addition/etc. avec réplication implicite.Par conséquent, j'ai nommé la sortie 'M' et pas' V7' :) –
@DennisJaheruddin: Aussi, vous avez raison :) 'repmat' est assez rapide, et l'implémentation dans la boîte à outils lightspeed perd pour MATLAB moderne, sauf dans un quelques cas de niche à peine rencontrés. Et même alors, ce n'est presque jamais le goulot d'étranglement. Je soupçonne que le PO a un problème complètement différent. Je m'amusais juste à essayer de trouver d'autres façons de le faire :) –
- 1. Alternative aux vecteurs pour les grands ensembles de données? C++
- 2. Pour boucle dans MATLAB pour les vecteurs
- 3. conversion de Matlab à python de repmat
- 4. Fonction Matlab repmat équivalente en C++
- 5. Quel est l'équivalent de repmat de MATLAB dans NumPy
- 6. Ajout de vecteurs dans Matlab
- 7. Vecteurs de matlab d'épissage
- 8. Générer des vecteurs dans MATLAB
- 9. Matlab repmat en un seul réseau de démultiplication simple?
- 10. Comparer deux vecteurs dans Matlab
- 11. Matlab firpm échoue pour les grands tableaux de données AFR
- 12. Python: équivalent aux svds de Matlab (A, k) pour les grands tableaux?
- 13. manipulations de multiples vecteurs dans Matlab
- 14. Histogramme de deux vecteurs dans Matlab
- 15. Matlab transformant les vecteurs en une matrice
- 16. Supprimer les grands vecteurs union en C++ efficacement?
- 17. Comment dessiner des vecteurs (vecteurs physiques 2D/3D) dans MATLAB?
- 18. Overlap entre deux vecteurs dans Matlab
- 19. Matlab alternative unique
- 20. données d'écriture dans un fichier lors de l'utilisation repmat dans Matlab
- 21. Comment étiqueter deux vecteurs dans Matlab? .
- 22. Angle entre deux vecteurs dans Matlab
- 23. Alternative au diagramme de dispersion dans matlab
- 24. Matlab gauche - division en vecteurs?
- 25. Comment effectuer XOR dans MATLAB pour deux vecteurs?
- 26. Matlab produit de vecteurs en troisième dimension
- 27. Matlab: moyen facile d'obtenir les vecteurs de base standard?
- 28. Alternative à l'importateur par lot pour neo4j pour les grands ensembles de données
- 29. Ignorer les vecteurs contenant des entrées NaN dans les calculs Matlab
- 30. Trier les vecteurs dans les vecteurs 2D
Voir si cela est assez inspirant - http://stackoverflow.com/questions/22847086/how-to-replicate- an-array – Divakar
Pourquoi avez-vous besoin de répliquer ces vecteurs en premier lieu? peut-être vous pouvez éviter cette réplication en utilisant 'bsxfun'? – Shai
Bien que je n'exclus pas la possibilité de battre repmat, ce n'est pas si mal. En tant que tel, vous voudrez probablement regarder dans la création et l'utilisation de vos matrices. –