2011-02-01 14 views
11

Desidero concatenare orizzontalmente le linee di un array di stringhe di celle come mostrato di seguito.Insieme di stringhe di celle concatenate orizzontalmente

start = {'hello','world','test';'join','me','please'} 

finish = {'helloworldtest';'joinmeplease'} 

Esistono funzioni integrate che eseguono la trasformazione sopra descritta?

risposta

1

Un modo semplice è troppo ciclo sulle righe

nRows = size(start,1); 
finish = cell(nRows,1); 

for r = 1:nRows 
    finish{r} = [start{r,:}]; 
end 

EDIT

A più coinvolti e leggermente più difficile da leggere soluzione che fa lo stesso (la soluzione generale è lasciata come esercizio per il lettore)

finish = accumarray([1 1 1 2 2 2]',[ 1 3 5 2 4 6]',[],@(x){[start{x}]})

+0

Grazie, funziona, ho passato gli ultimi 20 minuti provando a farlo con la vettorizzazione - non riesco a ricordare l'ultima volta che in realtà ho usato un ciclo in Matlab :) –

+0

@Chris R: Come puoi vedere, lì è una soluzione non ciclica che utilizza accumarray, anche se potresti non volerlo usare. Ad ogni modo, se il ciclo non fa troppe chiamate di funzione, di solito è ragionevolmente veloce nelle versioni più recenti di Matlab. – Jonas

+2

@ChrisR: se non ti piace il ciclo for, puoi scrivere in una riga come: 'finish = arrayfun (@ (i) [start {i ,:}], 1: size (start, 1), 'UniformOutput ', false)'; ' – Amro

22

C'è un modo semplice non-ciclo si può fare thi s utilizzando le funzioni NUM2CELL e STRCAT:

>> finish = num2cell(start,1); 
>> finish = strcat(finish{:}) 

finish = 

    'helloworldtest' 
    'joinmeplease' 
+0

+1 Non sapevo che si possa chiamare num2cell su un vettore! – Jonas

+0

Questa dovrebbe essere la risposta accettata. –

-1

Penso che si desidera è che questi due sono concatenati in un unico array di celle. Prova a usare questo codice, funziona per me.

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

+0

la variabile di esempio 'finish' era intesa come ** output ** (il risultato finale). Non dovrebbe essere parte degli input. – Hoki

+0

Semplice sostituire 'X' con 'finire' –

Problemi correlati