2016-08-03 17 views
1

Ziemlich einfaches Problem, ich möchte ein Array mit char in einer for-Schleife erstellen.Erstellen eines Arrays mit Zeichen und steigenden Zahlen

Code:

a = [1:5]; 
arr = []; 
for i = 1:length(a) 
    arr(i) = ['f_',num2str(i)] 
end 

Ich bin Fehler bekommen:

In an assignment A(I) = B, the number of elements in B and I must be the same. 

alles, was ich will, ist ein Array:

[f_1 f_2 f_3....] 

Antwort

3

Dies liegt daran, arr(i) ein einzelnes Element ist, während ['f:', num2str(i)] enthält drei Zeichen. Auch for i = 1:length(1) macht keinen Sinn, da length(1) garantiert 1 ist. Ich glaube du wolltest for i = 1:length(a). Wenn das der Fall ist, schlage ich vor, Sie ersetzen length mit numel und i mit ii.

Der bessere Weg um das Array Sie wird wie folgt verwendet sprintf erstellen möchten:

sprintf('f_%i\n',1:5) 
ans = 
f_1 
f_2 
f_3 
f_4 
f_5 

Oder possiblby:

sprintf('f_%i ',1:5)  
ans =  
f_1 f_2 f_3 f_4 f_5 

ich das denke, was Sie wirklich wollte:

for ii = 1:5 
    arr{ii} = ['f_', num2str(ii)]; 
end 
arr =  
    'f_1' 'f_2' 'f_3' 'f_4' 'f_5' 

Oder einfacher:

arr = arrayfun(@(n) sprintf('f_%i', n), 1:5, 'UniformOutput', false) 

Die letzten beiden wie folgt indiziert werden können:

arr{1}  
ans =  
f_1 

Sie können auch tun (gleiche Ergebnis):

str = sprintf('f_%i\n', 1:5); 
arr = strsplit(str(1:end-1), '\n') 

Wenn Sie diese Variablennamen erstellen tun, dann bitte nicht. Verwenden Sie stattdessen Zellen oder Strukturen.

+0

Entschuldigung, Tippfehler. Ich wollte schreiben "für i = 1: Länge (a)" – user5603723