Обратите внимание, что datestr
выводит строку, в то время как назначение New_Nun(i,j)=...
ожидает одно значение.
datestr(nun(i,j),'HH:MM:SS')
выводит массив [8 x 1] char, который не помещается в New_Nun(i,j)
,И, кстати, 'HH:MM:SS'
действительно правильный аргумент для часов, минут и секунд.
Вы можете использовать ячейку для New_Nun, которая может содержать любые данные, включая строки произвольной длины:
%Initialize random values with a NaN
nun=rand([5 5]);
nun(2,5)=NaN;
New_Nun = cell(size(nun)); %Initialize the cell array
not_a_nan = ~isnan(nun); %Selection valid values
New_Nun(not_a_nan) = cellstr(datestr(nun(not_a_nan),'HH:MM:SS')); %Fill the cell array
disp(New_Nun)
'13:47:28' '23:37:19' '06:00:28' '13:24:09' '12:38:05'
'00:55:58' '08:34:58' '04:25:44' '11:14:46' []
'13:17:25' '10:34:02' '11:17:16' '04:42:18' '05:51:32'
'20:40:44' '18:30:16' '04:29:22' '17:43:03' '22:05:24'
'16:36:35' '10:17:18' '22:45:41' '16:04:17' '07:06:39'
Значение NaN было преобразовано в пустую ячейку.Его можно заменить любым значением по умолчанию, например, New_Nun(~not_a_nan)={'00:00:00'};
Этот код не обрабатывает часы свыше 24, как datestr.Для этого часы нужно обрабатывать отдельно.
%Initialize random values with a NaN and one value larger than 24h
nun=rand([5 5]);
nun(2,5)=NaN;
nun(3,4)=nun(3,4)+10; % One value above 24h
New_Nun = cell(size(nun)); %Initialize the cell array
not_a_nan = ~isnan(nun); %Selection valid values
mmss = cellstr(datestr(nun(not_a_nan),'MM:SS')); %Write only MM:SS
hh = floor(nun(not_a_nan(:))*24); %Get hours, and make it a column vector
%Now, add the hours
hours_not_zero = hh~=0; % Optional: used to display mm:ss if hh=0
mmss(hours_not_zero) = cellfun(@(h,m) sprintf('%02d:%s',h,m),num2cell(hh(hours_not_zero)),mmss(hours_not_zero),'uniformoutput',false);
New_Nun(not_a_nan) = mmss;
disp(New_Nun)
'02:53:42' '08:38:56' '12:07:03' '15:28:54' '12:49:18'
'16:21:15' '03:44:23' '01:22:31' '20:43' []
'02:36:04' '11:08:51' '19:51:35' '244:45:48' '33:55'
'16:14:08' '08:04:01' '12:27:22' '08:17:48' '06:16:15'
'10:41:08' '03:16:19' '04:47:15' '04:33:37' '20:36:42'
На этот раз значение 35:34:11 отображается правильно.Значимые часы не отображаются, например, «20: 43» для «00: 20: 43».