当前位置:  开发笔记 > 编程语言 > 正文

如何计算矩阵中连续出现的值(正常运行时间)的长度?

如何解决《如何计算矩阵中连续出现的值(正常运行时间)的长度?》经验,为你挑选了0个好方法。

我有这样的数据:

 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(例如)并行运行.有没有办法使用矢量化矩阵运算同时在所有列中执行此操作?

编辑:我应该补充说,由于每个设备可能具有不同数量的正常运行时间,因此这很复杂.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有