Matlab,迭代中的连接问题?我如何解决它?
Matlab,problem with concatenation in an iteration? How do I fix it?
我遇到的问题是它只能部分工作,但我可以添加什么才能使其工作?
A2 = [20 4 6 8 5];
A3 = [10 2 3 4 6];
Str=[];
formatSpec = 'P%d (%d,%d)';
for i=1:length(A2)
str = char(sprintf (formatSpec, i, A2(i),A3(i)));
Str=[Str;str];
end
set(handles.text2,'string',Str);
您连接的不是字符串,而是字符数组。这样想,它已经回答了你的问题:如果你有一个两位数,则字符数组比一位数的字符数组长一个元素......你不能连接两个不同的数组垂直大小。
解决方案相当简单:使用实际字符串(在 R2016a 前后某处引入)。字符串用 ""
表示,而不是 ''
,它们是字符。所以用 string
替换你的 char
并且它工作正常。 (更好的是:提供 formatSpec
作为 ""
字符串,它 sprintf()
将立即 return 一个字符串)
旁注:
顺便说一句,如果你正在循环,你应该总是分配内存。这就是 Str
有橙色波浪下划线的原因。这是因为 MATLAB 将数组连续存储在 RAM 中,并且必须将其复制到更大的部分,因为它超出了当前的部分。
所以在循环中写 Str = strings(length(A2),1)
和索引 Str(i) = ...
而不是 Str=[]
。
就我个人而言,我更喜欢 num2str
而不是 sprintf
但我不能给出一个很好的理由,除了它也可以在不提供格式的情况下工作。
我遇到的问题是它只能部分工作,但我可以添加什么才能使其工作?
A2 = [20 4 6 8 5];
A3 = [10 2 3 4 6];
Str=[];
formatSpec = 'P%d (%d,%d)';
for i=1:length(A2)
str = char(sprintf (formatSpec, i, A2(i),A3(i)));
Str=[Str;str];
end
set(handles.text2,'string',Str);
您连接的不是字符串,而是字符数组。这样想,它已经回答了你的问题:如果你有一个两位数,则字符数组比一位数的字符数组长一个元素......你不能连接两个不同的数组垂直大小。
解决方案相当简单:使用实际字符串(在 R2016a 前后某处引入)。字符串用 ""
表示,而不是 ''
,它们是字符。所以用 string
替换你的 char
并且它工作正常。 (更好的是:提供 formatSpec
作为 ""
字符串,它 sprintf()
将立即 return 一个字符串)
旁注:
顺便说一句,如果你正在循环,你应该总是分配内存。这就是 Str
有橙色波浪下划线的原因。这是因为 MATLAB 将数组连续存储在 RAM 中,并且必须将其复制到更大的部分,因为它超出了当前的部分。
所以在循环中写 Str = strings(length(A2),1)
和索引 Str(i) = ...
而不是 Str=[]
。
就我个人而言,我更喜欢 num2str
而不是 sprintf
但我不能给出一个很好的理由,除了它也可以在不提供格式的情况下工作。