vikkiv
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору r_green Чего-уж там извинятся на пути поиска в процессе экспериментов и не такое бывает, тем более практически под заказ это скорее из разряда благотворительности .. Спасибо, работает отлично, сейчас погоняю на тайминги с массивами на десятки тысяч значений.. Сначала ещё думал как данные пердоставлять, в формате {start,duration} или {start,end} , в конце-концов ко второму само пришло. Edit: С более длинными массивами (3-4 дня 10000>n>15000, интервалы=15 мин) как и ожидалось алгоритм оказался весьма требовательным к ресурсам, если не делить поток событий (когда принадлежит интервалу а когда нет) и регистрировать событие по месту начала без переноса на соседний интервал как реализовал popkov - то временные затраты падают в 30 раз.. Однако на малых интервалах с малым кол-вом событий полюбому более точный инструмент, т.к. нагрузка на интервал адекватнее видна.. П.С. на exponenta.ru почему-то популярность Mathematica ниже по сравнению с MathCad в пропорциях 1:5 по обсуждаемости и 1:9 по просмотрам .. Edit2: По второму вопросу Цитата: 2) Построить график плотности событий в любой момент времени (т.е. кол-во активных событий в любой момент времени) на всём диапазоне (1800~9000). / (кривая, температурный график или BarChart) | Из исходных данных: Код: data={{1862,15},{2498,900},{2661,654},{2883,1},{3031,934},{3636,11},{4096,72},{4288,51},{4321,11},{4355,34},{4380,17},{4403,116},{4411,6},{4448,27},{4450,26},{4488,34},{4575,685},{4678,6},{4693,690},{4958,933},{5144,12},{6187,673},{6266,49},{6311,5},{6992,195},{7398,10},{7557,899},{7717,44},{7776,258},{8511,31},{8877,939},{8913,513},{8944,178}}; time={#1,#1+#2}&@@@data; lines=Table[{{time[[n]][[1]],n},{time[[n]][[2]],n}},{n,1,Length[time]}]; ListLinePlot[lines,PlotStyle->Directive[Blue,Thickness[0.003]],Filling->Axis,GridLines->{Table[n,{n,1800,10000,500}],None},GridLinesStyle->Directive[Orange,Dashed],PlotRange->{{1800,10000},{0,35}},AxesOrigin->{1800,0}] | получил верхний график: И из вручную собранного вектора по верхнему графику получил нижний (синим цветом) .. сам вектор с остальным кодом здесь Код: density={{62,0},{15,1},{621,0},{163,1},{222,2},{1,3},{147,2},{284,3},{83,2},{238,1},{11,2},{318,1},{131,0},{72,1},{120,0},{33,1},{11,2},{7,1},{16,0},{25,1},{9,2},{8,1},{6,0},{8,1},{6,2},{31,1},{2,2},{25,3},{1,2},{12,1},{31,2},{3,1},{53,0},{103,1},{6,2},{9,1},{265,2},{186,3},{12,4},{104,3},{123,2},{508,1},{296,0},{79,1},{45,2},{4,3},{1,2},{544,1},{132,0},{195,1},{211,0},{10,1},{149,0},{160,1},{44,2},{15,1},{258,2},{422,1},{55,0},{31,1},{335,0},{36,1},{31,2},{178,3},{304,2},{390,1},{184,0}}; RectangleChart[density,ChartStyle->Darker[Blue],ChartBaseStyle->EdgeForm[None],AspectRatio->1/5] | Но как это сделать цивилизованным путём автоматически/на командах языка Mathematica для бОльшего количества данных (именно график плотности событий, или хотя-бы/особенно вектор "density") - до меня так и не доходит, интеллекта в этой области нехватает. Кто-то сможет подсказать практическое решение? |