【问题标题】:Find median position points of duration evens within array in Matlab在Matlab中的数组内找到持续时间的中位数位置点
【发布时间】:2015-08-17 10:59:47
【问题描述】:

我有以下向量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 中的下一个子字符串处重新开始。

这里提供的解决方案Find median position points of duration eventsA(1:3)之后小于15的2个或更多连续数字(本例中为3)的最后一个数字分配给下一个子字符串A(7:8),与其他子字符串相同,这不是计算持续时间事件的正确方法。

我想要一种方法来找到正确计算的持续时间事件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;

【问题讨论】:

  • 你能解释一下为什么 round(median(A(1:3))) = 2 吗?你只想要索引的中位数吗?
  • @Bowecho - 转发问题不是这里的工作方式。在最坏的情况下,版主会采取行动。你应该做什么:澄清你的第一个问题并添加尽可能多的细节,然后提供赏金。这样一来,您的问题将得到一周的充分关注,您一定会得到答案。
  • @thewaywewalk 我也会尝试这样做。

标签: arrays matlab duration


【解决方案1】:

这是我的解决方案,它可能很愚蠢(使用while循环......),但基本上解决了问题。

过程是先将每2个连续的整数相加,如果它们的和小于30,则其间必须有2个或多个小于15的整数。当总和大于 30 时,中间可以有 1 个或 0 个小于 15 的整数。 -注意:这仅在您有正数时才成立,如果存在负数,则此解决方案是错误的!

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];
A1 = A(1:end-1);
A2 = A(2:end);
B = A1+A2;
C = find(B<30);
Cmod = [1,C,size(A,2)];
counter = 1;
j = 1;

while counter < size(Cmod,2)
    temp = Cmod(:,counter):Cmod(:,counter+1)-1;
    if size(temp,2) < 2
        counter=counter+1;
    else
        a(j) = round(median(temp(3:end)));
        counter = counter+1;
        j=j+1;
    end
end
a(1) = a(1)-1; %this compensate the position shift in A1 and A2
a(end) = a(end)+1; 

输出是向量a,其内容为:

 a =

 >>2     8    15    24    31

【讨论】:

  • 感谢您的回答。我想概括解决方案,这意味着我希望能够轻松地更改小于 15 的连续元素的数量。
  • 所以我不确定如何概括您的解决方案。
  • @Bowecho 该解决方案仅适用于 2 个连续元素,因为您没有指定您需要通用解决方案,该解决方案非常有效(除了 while 循环)。
  • 不过,我需要一个通用的解决方案。
  • @Bowecho 然后请编辑您的问题以请求通用解决方案。我只是提出了我对一个既定问题的看法,我找到了一个相当有趣的解决方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
  • 1970-01-01
  • 2013-04-24
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
相关资源
最近更新 更多