[英]CAT arguments: dimensions are inconsistent
请看下面的MATLAB代码:
formatspec = '%5i';
delay = num2str(d,formatspec);
datasave = [datasave; repeating_character blanks(5) num2str(lenmax) blanks(5) delay];
end
我想要显示的结果datasave
以表格的形式。 在for循环中,变量d
值将从2
增加到127
。 lenmax
变量没有问题,因为它始终是一个数字。 但是问题在于可变的delay
。 在第一种情况下, delay = 2
的值,由于循环从2
开始,因此将为datasave
分配一个特定的维。 然后, d
的值在循环中继续增加。 在第9 个实例中,它将变为10
,这是一个2
位数的整数。 问题在这里。 当它变成两位数的整数(10)时,尺寸将不匹配,并且由于尺寸不相同,将出现使用vertcat
错误。
我认为使用%5d
应该可以解决问题,但事实并非如此。 如果将循环从10
开始更改为127
,则当delay = 100
时出现问题。 将显示从10
到99
的值,但是在显示100
,会弹出有关尺寸不匹配的相同错误。
请谁能告诉我如何解决这个问题?
正如@RodyOldenhuis解释的那样,我认为这是numstr
的一个细微错误。
解决此问题的一种方法是立即将整个向量传递给num2str
,这样就不会修剪空格(它仍在修剪中,但不超过最长字符串所允许的范围):
>> delays = num2str((2:127)', '%3d');
>> whos delays
Name Size Bytes Class Attributes
delays 126x3 756 char
>> delays([1 end],:)
ans =
2
127
您还可以选择用零而不是空格填充:
>> num2str(2, '%05d')
ans =
00002
您还可以使用未记录的sprintfc
(它返回未sprintfc
字符串的单元格数组):
>> sprintfc('%5d', (2:127)')
ans =
' 2'
.
.
' 127'
如果您在主函数底部查看edit num2str
,您会看到以下内容(或类似的内容,这无疑取决于MATLAB版本):
s = strtrim([cols{:}]);
基本上,这意味着您使用formatspec显式放入的所有空白都会被删除; 如果您问我一个错误。
使用char
进行组合最简单:
datasave = char(datasave, [repeating_character blanks(5) num2str(lenmax) blanks(5) delay]);
另外,您可以使用cellstrings
:
%# in the loop
%# (better to do this with pre-allocation)
datasave{end+1} = [...
repeating_character,...
blanks(5),...
num2str(lenmax),...
blanks(5),...
delay];
...
%# after the loop
datasave = char(datasave);
另外,您可以使用int2str
:
delay = int2str((2:127).')
另外,您可以使用sprintf
:
formatspec = '%5i\n';
delay = sprintf(formatspec, 2:127)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.