2016-07-04 11 views
1

die Matrix Gegeben: - A = [0 1 2 3 4 5];ein numerisches Array in einen String Zellenfeld Konvertieren

ich es in einen String Zellenfeld wie folgt konvertieren möchten: A = {'0' '1' '2' '3' '4' '5'};

ich in der Lage bin, dies zu tun mit:

A = [0 1 2 3 4 5]; 

for i=1:6 
    A1{i}= num2str(A(i)); 
end 
A1 

Ich möchte dies auf eine einfachere Weise und ohne eine Schleife tun.

Antwort

4

Eine weitere Methode einer Zeile mit num2str und strsplit:

A1 = strsplit(num2str(A)) 
+0

+1 schöne und schnelle Lösung, aber aus Gründen der Kompatibilität und Geschwindigkeit würde ich vorschlagen, 'regexp'' A1 = regexp (num2str (A), '\ s +', 'split'); 'In meinen Tests' regexp' ist sieben mal schneller als 'strsplit' – serial

3

können Sie arrayfun in Kombination mit einem anonymous function verwenden:

B = arrayfun(@(x) {num2str(x)}, A); 

cellfun sind ein wenig schneller und funktioniert auch gut:

B = cellfun(@num2str, num2cell(A), 'uni', 0); 

schnellste Lösung ist eine verbesserte Version dieses solution (Credits zu obchardon)

B = regexp(num2str(A), '\s+', 'split'); 
+1

'arrayfun' ist nur ein Wrapper für die Schleife, so ist es im Grunde identisch mit dem OP. – Dan

+0

@Dan Nun nicht genau. Dies ergibt tatsächlich eine Zahl pro Zelle und das OP wird eine Zeichenkette mit einem Zeichen in jeder Zelle erzeugen. Ich denke eigentlich, dass das näher an der Frage liegt, da dies die einzige Antwort ist, die äquivalenten Code produziert. – patrik

+1

@Patrik Ich sehe keinen Unterschied zwischen dieser und der OP-Schleife, auch für mehrstellige Zahlen ... – Dan

Verwandte Themen