Автор |
Сообщение |
GREEN_X5
Зарегистрирован: 13.04.2012
Сообщения: 136
|
Гуру алгоритмов, поможите, у меня мозга на это не хватает! )
Есть переменная-массив например DRD.
Элементы у него например с такими значениями
DRD={0,0,1,2,3,1,2,0,0,1,0,0,0,1,2,1,2,0}
Нужно вычислить среднее значение максимумов между нулями (выделил их жирным шрифтом).
Т.е. в данном случае между 3,1,2.
Заранее благодарен. |
Последний раз редактировалось: GREEN_X5 (Ср Апр 15, 2015 3:45 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
надо среднее значение по всем массиву? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
GREEN_X5
Зарегистрирован: 13.04.2012
Сообщения: 136
|
000 писал(а): |
надо среднее значение по всем массиву? |
Нет, среднее максимальных значений в блоках между нулевыми значениями.
Здесь
DRD={0,0,1,2,3,1,2,0,0,1,0,0,0,1,2,1,2,0}
проходя от первого элемента в массиве до последнего между нулевыми значениями видны "блоки" значений с непрерывно ненулевыми значениями, это здесь
1,2,3,1,2, и 1 и 1,2,1,2,
У каждого блока есть свой экстремум (максимум), это
3 и 1 и 2
Нужно среднее значение от 3,2,1, т.е. в итоге (3+1+2)/3 |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вот ты посчитал среднее значение максимумов по всему массиву. А если массив будет длиннее и в нем не 3 "куска" а 50. Считать среднее из всех 50 "участков"? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
GREEN_X5
Зарегистрирован: 13.04.2012
Сообщения: 136
|
000 писал(а): |
Вот ты посчитал среднее значение максимумов по всему массиву. А если массив будет длиннее и в нем не 3 "куска" а 50. Считать среднее из всех 50 "участков"? |
Ну да ) |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Как то так
Код: |
Begin = Ref(Aux1, -1) == 0 AND Aux1 != 0;
End = Ref(Aux1, -1) != 0 AND Aux1 == 0;
HS = HighestSince(Begin, Aux1, 1);
MaxVal = IIf(End, HS, 0);
aver = LastValue(Cum(MaxVal)/Cum(End));
Plot(Aux1, "", ColorRed);
Plot(aver, "111", colorBlue); |
Тут Aux1 это исследуемый массив. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
GREEN_X5
Зарегистрирован: 13.04.2012
Сообщения: 136
|
Олег, спасибо!
А я тут напрягся и тоже через козью попу (вернее через цикл) написал. ))
Код: |
// Drd - массив
CountExtr=0; SumExtr=0; TrgExtr=0; MaxExtr=0;
for( i = 0; i < BarCount; i++ ) {
if (Drd[i]!=0 AND Drd[i-1]==0) {TrgExtr=1; CountExtr=CountExtr+1; MaxExtr=0;}
if (Drd[i]==0 AND Drd[i-1]!=0) {TrgExtr=0; SumExtr=SumExtr+MaxExtr;}
if (TrgExtr==1) {MaxExtr=Max(MaxExtr,Drd[i]);}
}
MADrd=SumExtr/CountExtr; |
Буду проверять оба варианта. ) |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|