我有这样的数据:
1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1
每列代表一个设备,每行代表一个时间段.每个数据点指示设备在该时间段内是否处于活动状态.我正在尝试计算每个设备处于活动状态的每个正常运行时间或"拼写"的长度.换句话说,每列中每个连续法术的长度.在这种情况下,它将2 11 3
用于第一列,依此类推.
使用一个设备(单列数据)很容易做到这一点:
rng(1) %% Parameters lambda = 0.05; % Pr(failure) N = 1; % number of devices T = 18; % number of time periods in sample %% Generate example data device_status = [rand(T, N) >= lambda ; false(1, N)]; %% Calculate spell lengths, i.e. duration of uptime for each device cumul_status = cumsum(device_status); % The 'cumul_status > 0' condition excludes the case where the vector begins with one % or more zeros cumul_uptimes = cumul_status(device_status == 0 & cumul_status > 0); uptimes = cumul_uptimes - [0 ; cumul_uptimes(1:end-1)];
所以我可以简单地遍历列并一次执行一列并使用parfor
(例如)并行运行.有没有办法使用矢量化矩阵运算同时在所有列中执行此操作?
编辑:我应该补充说,由于每个设备可能具有不同数量的正常运行时间,因此这很复杂.