Суммируйте только последовательные положительные числа и поместите сумму в новый вектор в указанных c позициях (MATLAB) - PullRequest
0 голосов
/ 26 марта 2020

У меня есть переменная P1 (LENGTH = 36), и я хочу сделать сумму ТОЛЬКО последовательных положительных значений и поместить сумму в новый вектор (называемый «out») в положение, которое вы можете видеть на рисунке. Если есть только одно значение, вы можете поместить его в ту же позицию P1 и повторить значение, указанное ниже, 8 раз. В противном случае поместите его в самую нижнюю последовательную положительную позицию и повторите это 8 раз. Для других значений я хочу ноль. Смотри рисунок ниже. В красном есть то, что мне нужно рассчитать.

Я попытался с помощью приведенного ниже кода, однако он выдает все, равное 0. Я пытался решить проблему, но мне нужна помощь.

Заранее спасибо !!

enter image description here

lo = P1 > 0;
Dfference = diff([lo(:);0]); 
Ends  = find(Dfference==-1);  % -1 are the positions where a sequence ends
Start = find(Dfference==1)+1; %  1 are the positions where a sequence starts -1

out = zeros(size(P1));
for idx=1:length(Start)
    out(Ends(idx):Ends(idx)+8) = sum(P1(Start(idx):Ends((idx))));
end 

Это моя матрица:

P1 = [
39
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
60
39
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
60
39
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
60];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...