2016-08-03 1 views
1

Довольно простая проблема, я хочу создать массив с char в цикле for.Создание массива с символами и увеличивающимися номерами

код:

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

Я получаю сообщение об ошибке:

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

все я хочу есть массив:

[f_1 f_2 f_3....] 

ответ

3

Это потому, что arr(i) является единственным элементом, в то время как ['f:', num2str(i)] содержат три символа. Кроме того, for i = 1:length(1) в действительности не имеет смысла, поскольку length(1) гарантировано 1. Наверное, вы хотели for i = 1:length(a). Если это так, я предлагаю вам заменить length на numel и i с ii.

Лучший способ создать массив, который вы хотите использует sprintf как это:

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

Или possiblby:

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

Я думаю, это то, что вы действительно хотели:

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

Или проще:

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

Последние два могут быть проиндексированы следующим образом:

arr{1}  
ans =  
f_1 

Вы можете также сделать (тот же результат):

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

Если вы делаете это, чтобы создать имена переменных, то, пожалуйста, нет. Вместо этого используйте ячейки или структуры.

+0

Извините, набрав ошибку. Я хотел написать 'для i = 1: length (a)' – user5603723

Смежные вопросы