例如,我有以下向量:
A = [34 35 36 0 78 79 0 0 0 80 81 82 84 85 86 102 0 0 0 103 104 105 106 0 0 107 201 0 202 203 204];
A中的每个元素每秒代表一个值。我想计算A中包含少于3个连续零的元素=>我将获得以秒为单位的持续时间值。
在这种情况下,计数在每三个连续的零之前停止,并在三个连续的零之后重新开始,依此类推。就像这样:
A = [34->1s 35->2s 36->3s 0->4s 78->5s 79->6s stop 80->1s 81->2s 82->3s 84->4s 85->5s 86->6s 102->7s stop 103->1s 104->2s 105->3s 106->4s 0->5s 0->6s 107->7s 201->8s 0->9s 202->10s 203->11s 204->12s];
结果如下:
Duration = [6 7 12]; in seconds
有人知道吗?
您可以转换A
为字符,'0'
并'1'
(例如)根据原始值是零还是非零进行转换,使用strsplit
并获取每个子字符串的元素数。
设N = 3
要分割的零数。然后:
Duration = cellfun(@numel, strsplit(char((A>0)+'0'), repmat('0',1,N)));
请注意,上面的代码基于精确的N
零进行拆分。例如,A = [1 2 3 0 0 0 0 4 5]
给定Duration = [3 3]
,因为第四个零被分配给第二个子字符串。
如果要基于零个N
或多个零进行拆分,请使用正则表达式:
Duration = cellfun(@numel, regexp(char((A>0)+'0'), [repmat('0',1,N) '+'], 'split'));
对于A = [1 2 3 0 0 0 0 4 5]
这给Duration = [3 2]
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句