Matlab 如何找到索引之间的元素数?

Matlab 如何找到索引之间的元素数?,matlab,Matlab,我每周都有以下一系列股价高点(每个元素都是针对特定的一周): 我需要找出自5天高点出现以来的周期数。例如,5天高点如下所示: 5.7627 6.0100 6.0100 6.0100 6.0671 6.0671 6.0671 6.0671 为此,我使用了: x = movmax(high,[n-1 0],'omitnan') 但是,我不知道如何计算一个数组来查找这些数字出现后的几周。预期输出如下所示: 0 0 1 2 0 1 2

我每周都有以下一系列股价高点(每个元素都是针对特定的一周):

我需要找出自5天高点出现以来的周期数。例如,5天高点如下所示:

    5.7627
    6.0100
    6.0100
    6.0100
    6.0671
    6.0671
    6.0671
    6.0671
为此,我使用了:

x = movmax(high,[n-1 0],'omitnan')
但是,我不知道如何计算一个数组来查找这些数字出现后的几周。预期输出如下所示:

0
0
1
2
0
1
2
3
4
...

为什么不使用简单好的老程序呢

price=[5.7627
6.0100
5.8198
5.8198
6.0671
6.0671
6.0100
5.5916];

M = price(1); % max in the list
M_ind = 1; % index where M happened
n_weeks = zeros(size(price)); % output
for k=2:numel(price)
    if price(k) > M
        M = price(k);
        M_ind = k;
    else
        n_weeks(k) = k-M_ind;
    end
end

disp(n_weeks)
输出

0
0
1
2
0
1
2
3
...
使用和:


使用:


使用(这种方法比前面的方法需要更多的内存,因为它构建了一个数据大小的中间方阵):


你的问题看起来与问题无关。。。你能澄清一下吗?似乎你想在数组中重复一个元素,直到你找到一个更大的元素,然后你重复新元素。。。
0
0
1
2
0
1
2
3
...
t = cumsum([true; diff(x)~=0]);
u = sparse(1:numel(high), t, true);
result = nonzeros(cumsum(u).*u)-1;
t = cumsum([true; diff(x)~=0]);
result = accumarray(t, t, [], @(u){(0:numel(u)-1).'});
result = cell2mat(result);
t = cumsum([true; diff(x)~=0]);
result = sum(triu(t==t.')).'-1;