J'ai deux vecteurs Je veux créer des chaînes à partir des indices de puis je veux concaténer les chaînes obtenues: p> Je voudrais une solution générale pour m'aider à automatiser cet algorithme. p> p> a code> et b code> comme exemple: a = [1 2 3 4]; code>
b = [5 6 7 8]; code> p> A code> et B code>: p> C = CAT (2, C1, C2, C3, C4) = [ 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8]; CODE> P>
6 Réponses :
Essayez quelque chose comme:
A = [1:5; 5:8];, C = []; for i = A, C = [C i(1):i(2)]; end Cstr = num2str(C);
Je ferais cela:
a = [1 3 4 5]; b = [5 6 7 8];
c =[];
for i =1:length(a)
c = [c [a(i):b(i)]];
end
num2str(c)
Tout d'abord, n'attribuez pas de variables comme i "D Utilisez un de cette façon C1 code>, c2 code>, c3 code> etc., utilise des cellules pour cela. pour code> -Loop pour cela, bien qu'il existe probablement une meilleure alternative. p> tmp code> TMP code> stocke vos réseaux séparés, la ligne suivante l'ajoute au tableau C p> p> p>
Cela devrait faire le tour sans utiliser de boucle: p> performance strong> P> J'ai essayé de faire une comparaison rapide entre cette méthode, La méthode de Luis Mendo et le Anwer de Luis Mendo est le gagnant clair, en termes de complexité de temps Le code peut être trouvé ici . Je serais très heureux d'obtenir des commentaires, je suis un peu incertain sur ces mesures. P> p>
Pour code> boucle (voir par exemple Réponse de Visser ). J'ai créé deux tableaux avec des nombres pseudo-aléatoires de 1 à 50 et 501 à 1000 et j'ai programmé le calcul de la taille de la matrice de 1 à 300, sans tenir compte de la conversion de chaîne. P>
a > P> Arrayfun Code> semble être à pair avec BSXFun code>. Le pour code> tarifs de boucle bien pire, à l'exception des très petites tailles de matrices, mais je ne suis pas sûr que le timing peut y faire confiance. P>
Merci, je cherchais une telle approche.
Juste pour que vous sachiez, arrayfun code> est en réalité une boucle de déguisement, même s'il convient sur une ligne mais bien fait de toute façon!
BENOIT_11: La différence de performance cependant est assez drastique, le pour code> est ~ 20-30 fois plus lent sur ma machine, probablement parce que la matrice résultante ne peut pas être préallocate - je ne suis pas un expert de performance MATLAB bien que...
@dasdingonesin. Généralement, il est préférable d'utiliser TIMIIT CODE> A > Plutôt que TIC / TOC CODE> pour un calendrier et une référence précis.
Merci pour l'effort de faire le timing! Comme le dit Hoki, TimeIt code> est plus précis pour les mesures de temps d'exécution
Ceci peut être fait sans boucles (qu'ils pour code>, arayfun code> ou cellfun code>) en utilisant BSXFun Code> Capacité de masquage de BSXFUN . Cela fonctionne également si les "chaînes" ont des longueurs différentes, comme dans l'exemple suivant. C =
1 2 3 2 3 4 5 3 4 5 6
juste pour le plaisir:
A (2): B (2) = [3 4 5 6] CODE>? Vous voulez aussi vraiment des cordes et pas seulement des vecteurs de doubles?Oui, tu as raison, j'ai fait une édition. J'ai changé quelque chose au début et j'ai oublié de mettre à jour le résultat.