11
votes

Gamme de cellules Concaténate horizontalement de cordes

Je souhaite concaténer horizontalement des lignes d'une gamme de cellules de chaînes comme indiqué ci-dessous. XXX

Y a-t-il des fonctions intégrées qui accomplissent la transformation ci-dessus? >


0 commentaires

3 Réponses :


1
votes

Un moyen simple est trop boucle sur les lignes xxx

edit

A plus impliqué et un peu plus difficile à lire la solution qui fait la solution qui fait le identique (la solution générale est laissée comme un exercice pour le lecteur)

finition = Accumparray ([1 1 2 2 2] ', [1 3 5 2 4 6]', [] , @ (x) {[Démarrer {x}]} )


3 commentaires

Merci, ça marche, j'ai passé les 20 dernières minutes à essayer de le faire avec une vectorisation - je ne me souviens pas de la dernière fois que j'ai eu une boucle à Matlab :)


@Chris r: Comme vous pouvez le constater, il existe une solution non-boucle utilisant Accumarray, bien que vous ne souhaitiez pas utiliser cela. Quoi qu'il en soit, si la boucle ne fait pas trop d'appels de fonction, il est généralement raisonnablement rapide dans les versions plus récentes de Matlab.


@ChrisR: Si vous n'aimez pas la boucle pour la boucle, vous pouvez écrire en une ligne comme suit: Terminer = ArrayFun (@ (i) [Démarrer {I,}], 1: Taille (début, 1), ' UniformeOutput ', false)';



22
votes

Il y a une solution de non-boucle facile Vous pouvez le faire en utilisant les fonctions Num2Cell et strcat : xxx


0 commentaires

-1
votes

Je pense que vous voulez, c'est que ces deux sont concaténés comme une matrice cellulaire unique. Essayez d'utiliser ce code, fonctionne pour moi.

'x = [{start}, {finir}];'


2 commentaires

L'exemple de variable finition était destiné à être la sortie (le résultat final). Il n'est pas censé faire partie des intrants.


Simple remplacer 'x' par 'finition'