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