创建一个包含字符和递增数字的数组

时间:2016-08-03 09:28:38

标签: arrays matlab

非常简单的问题,我想在for循环中创建一个带char的数组。

代码:

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....]

1 个答案:

答案 0 :(得分: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

或者可能:

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')

如果你这样做是为了创建变量名,那么请不要。改为使用细胞或结构。