簡體   English   中英

CAT參數:尺寸不一致

[英]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時出現問題。 將顯示從1099的值,但是在顯示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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM