Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 检查会议记录的顺序_Matlab_Sequence - Fatal编程技术网

Matlab 检查会议记录的顺序

Matlab 检查会议记录的顺序,matlab,sequence,Matlab,Sequence,我有一个单元格数组,它应该包含从“00:00:00”到“23:59:00”的时间,分辨率为1分钟: time={'00:00:00' '00:01:00' '00:02:00' '00:03:00' '00:04:00' '00:05:00' '00:06:00' '00:07:00' '23:59:00'} 什么是检查单元阵列“时间”中是否存在所有分钟并识别缺失分钟的智能方法 使用示例中的向量,我想要一个包含NaN的向量,对应缺失的分钟数: missing_time={'00:00:00'

我有一个单元格数组,它应该包含从“00:00:00”到“23:59:00”的时间,分辨率为1分钟:

time={'00:00:00'
'00:01:00'
'00:02:00'
'00:03:00'
'00:04:00'
'00:05:00'
'00:06:00'
'00:07:00'
'23:59:00'}
什么是检查单元阵列“时间”中是否存在所有分钟并识别缺失分钟的智能方法

使用示例中的向量,我想要一个包含NaN的向量,对应缺失的分钟数:

missing_time={'00:00:00'
'00:01:00'
'00:02:00'
'00:03:00'
'00:04:00'
'00:05:00'
'00:06:00'
'00:07:00'
NaN
NaN
...
'23:59:00'}

谢谢

您应该转换为如下序列日期编号格式:

datenum(datevec(time))

但这是以天为单位的,所以让我们转换为分钟:

datenum(datevec(time))*24*60

现在,
diff
将给出连续元素之间的分钟数:

diff(datenum(datevec(time)))

对于您的示例数据,这为我们提供了:

ans =

   1.0000e+00
   1.0000e+00
   1.0000e+00
   1.0000e+00
   1.0000e+00
   1.0000e+00
   1.0000e+00
   1.4320e+03
这意味着前7个元素是正确的,但是在元素7和8之间缺少1431分钟(即添加1431
NaN
s)。因此,让我们简化示例数据,以合理的数字进行处理,这样您就可以看到填写
NaN
s的一种方法:

time={'00:00:00'
'00:01:00'
'00:02:00'
'00:04:00'
'00:05:00'
'00:06:00'
'00:10:00'}


I = round(cumsum(diff(datenum(datevec({'00:00:00',time{:}}'))*24*60)))+1           %//'

missing_time = cell(11,1);  %// in your actual solution you would replace 11 with 60*24
missing_time(:) = NaN;
missing_time(I) = {time{:}}'         %//'

missing_time = 
{
  [1,1] = 00:00:00
  [2,1] = 00:01:00
  [3,1] = 00:02:00
  [4,1] = NaN
  [5,1] = 00:04:00
  [6,1] = 00:05:00
  [7,1] = 00:06:00
  [8,1] = NaN
  [9,1] = NaN
  [10,1] = NaN
  [11,1] = 00:10:00
}

您应该转换为如下所示的序列日期编号格式:

datenum(datevec(time))

但这是以天为单位的,所以让我们转换为分钟:

datenum(datevec(time))*24*60

现在,
diff
将给出连续元素之间的分钟数:

diff(datenum(datevec(time)))

对于您的示例数据,这为我们提供了:

ans =

   1.0000e+00
   1.0000e+00
   1.0000e+00
   1.0000e+00
   1.0000e+00
   1.0000e+00
   1.0000e+00
   1.4320e+03
这意味着前7个元素是正确的,但是在元素7和8之间缺少1431分钟(即添加1431
NaN
s)。因此,让我们简化示例数据,以合理的数字进行处理,这样您就可以看到填写
NaN
s的一种方法:

time={'00:00:00'
'00:01:00'
'00:02:00'
'00:04:00'
'00:05:00'
'00:06:00'
'00:10:00'}


I = round(cumsum(diff(datenum(datevec({'00:00:00',time{:}}'))*24*60)))+1           %//'

missing_time = cell(11,1);  %// in your actual solution you would replace 11 with 60*24
missing_time(:) = NaN;
missing_time(I) = {time{:}}'         %//'

missing_time = 
{
  [1,1] = 00:00:00
  [2,1] = 00:01:00
  [3,1] = 00:02:00
  [4,1] = NaN
  [5,1] = 00:04:00
  [6,1] = 00:05:00
  [7,1] = 00:06:00
  [8,1] = NaN
  [9,1] = NaN
  [10,1] = NaN
  [11,1] = 00:10:00
}

以下是实现您所需的一些简单步骤:

  • 生成所有需要的时间
  • 使用
    ismember
    查看在实际列表中可以找到它们中的哪一个
  • NaN

  • 以下是实现您所需的一些简单步骤:

  • 生成所有需要的时间
  • 使用
    ismember
    查看在实际列表中可以找到它们中的哪一个
  • NaN

  • 这里有一个解决方案,它使用setdiff从给定的时间单元和一天中的所有时间中查找丢失的时间

    % convert to serial datenum
    time_serial = datenum(time, 'HH:MM:ss');
    dt = 1/(24*60); % 1 min
    
    % full time (1440x1)
    time_full = datenum('00:00:00', 'HH:MM:ss'):dt:datenum('23:59:00', 'HH:MM:ss');
    
    % find missing times and replace with NaN
    [~, missing_idx] = setdiff(time_full, time_serial);
    time_missing = cellstr(datestr(time_full, 'HH:MM:ss'));
    time_missing(missing_idx,:) = cellstr(repmat('NaN',length(missing_idx),1));
    

    这里有一个解决方案,它使用setdiff从给定的时间单元和一天中的所有时间中查找丢失的时间

    % convert to serial datenum
    time_serial = datenum(time, 'HH:MM:ss');
    dt = 1/(24*60); % 1 min
    
    % full time (1440x1)
    time_full = datenum('00:00:00', 'HH:MM:ss'):dt:datenum('23:59:00', 'HH:MM:ss');
    
    % find missing times and replace with NaN
    [~, missing_idx] = setdiff(time_full, time_serial);
    time_missing = cellstr(datestr(time_full, 'HH:MM:ss'));
    time_missing(missing_idx,:) = cellstr(repmat('NaN',length(missing_idx),1));
    

    最简单的方法,以找出是否有一个失踪。检查元素数:
    numel(time)
    如果元素数小于60*24,则缺少元素:恐惧这是查找是否缺少元素的最简单方法。检查元素的数量:
    numel(time)
    如果小于60*24,则缺少元素:担心这一点:我想你应该使用
    cumsum
    或其他方法来实际获取相关值的索引。@DennisJaheruddinexactly@gabboshow我认为在
    NaN
    周围不需要大括号,但是我只在线测试了八度音阶,所以Matlab可能会有点不同。我想你可能会想使用
    cumsum
    或者其他方法来实际获得相关值的索引。@DennisJaheruddinexactly@gabboshow我认为在
    NaN
    周围不需要大括号,但我只在网上测试了八度音阶,所以Matlab可能会略有不同。