CAT 参数:尺寸不一致
Posted
技术标签:
【中文标题】CAT 参数:尺寸不一致【英文标题】:CAT arguments: dimensions are inconsistent 【发布时间】:2014-07-08 09:59:52 【问题描述】:请看这段 MATLAB 代码:
formatspec = '%5i';
delay = num2str(d,formatspec);
datasave = [datasave; repeating_character blanks(5) num2str(lenmax) blanks(5) delay];
end
我想以表格的形式显示结果datasave
。变量d
的值将在for 循环中从2
递增到127
。 lenmax
变量没有问题,因为它始终是一个数字。但问题在于变量delay
。在第一个实例中,delay = 2
的值,因为循环以2
开始,一个特定的维度将被分配给datasave
。然后d
的值在循环中不断增加。在第 9th 实例期间,它将变为 10
,这是一个 2
数字整数。问题就在这里。当它变成 2 位整数 (10) 时,尺寸将不匹配,并且使用 vertcat
会出现错误,因为尺寸不一样。
我认为使用%5d
应该可以解决问题,但事实并非如此。如果我将循环更改为从10
开始到127
,则在delay = 100
时会出现问题。将显示从10
到99
的值,但在显示100
时,会弹出关于尺寸不匹配的相同错误。
谁能告诉我如何解决这个问题?
【问题讨论】:
【参考方案1】:正如@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('%5d', (2:127)')
ans =
' 2'
.
.
' 127'
【讨论】:
【参考方案2】:如果您查看 edit num2str
,在 main 函数的底部,您会看到以下内容(或类似内容,无疑取决于 MATLAB 版本):
s = strtrim([cols:]);
这基本上意味着您使用格式规范明确输入的任何空白都会被删除;如果你问我,这是一个错误。
使用char
进行连接是最简单的:
datasave = char(datasave, [repeating_character blanks(5) num2str(lenmax) blanks(5) delay]);
或者,您可以使用cellstrings
:
%# in the loop
%# (better to do this with pre-allocation)
datasaveend+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)
【讨论】:
以上是关于CAT 参数:尺寸不一致的主要内容,如果未能解决你的问题,请参考以下文章