非常简单的问题,我想在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....]
答案 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')
如果你这样做是为了创建变量名,那么请不要。改为使用细胞或结构。