我有以下矢量A:
A = [34 35 36 5 6 7 78 79 7 9 10 80 81 82 84 85 86 102 3 4 6 103 104 105 106 8 11 107 201 12 202 203 204];
对于n = 2
,我在A
内计算了大于或等于15的元素:
D = cellfun(@numel, regexp(char((A>=15)+'0'), [repmat('0',1,n) '+'], 'split'));
上面的表达式给出了以下输出作为持续时间值:
D = [3 2 7 4 6] = [A(1:3) **stop** A(7:8) **stop** A(12:18) **stop** A(22:25) **stop** A(28:33)];
上述算法通过计算大于或等于15的元素来计算持续时间值。计数还允许少于2个小于15的连续元素(n = 2
)。当有2个或更多连续元素小于15时,计数器停止,并在A
内的下一个子字符串处重新开始。
最后,我想找到一个方法来查找持续时间事件A(1:3)
,A(7:8)
,A(12:18)
,A(22:25)
和A(28:33)
的中位数点,其中正确计算。结果应如下所示:
a1 = round(median(A(1:3))) = 2;
a2 = round(median(A(7:8))) = 8;
a3 = round(median(A(12:18))) = 15;
a4 = round(median(A(22:25))) = 24;
a5 = round(median(A(28:33))) = 31;
我编辑了这个问题以使其更清晰,因为此处提供的解决方案将A(1:3)
之后的2个或更多个小于15的连续数字(在本例中为3)中的最后一个数字分配给下一个子串A(7:8)
与其他子串相同,因此产生错误的持续时间值,从而导致n = 2
或任何给定的偶数n
的持续时间事件的错误中间位置点。
任何人都知道如何实现这个目标?