Я пытаюсь использовать Mathematica для анализа некоторых необработанных данных.Я хотел бы иметь возможность динамически отображать диапазон данных, которые меня интересуют, используя Manipulate
и ListLinePlot
, но рендеринг графика очень медленный.Как я могу ускорить его?
Вот некоторые дополнительные детали.Внешний текстовый файл хранит необработанные данные: первый столбец представляет собой временную метку, второй, третий и четвертый столбцы представляют собой показания данных, например:
1309555993069, -2.369941, 6.129157, 6.823794
1309555993122, -2.260978, 6.170018, 7.014479
1309555993183, -2.070293, 6.129157, 6.823794
1309555993242, -1.988571, 6.238119, 7.123442
В одном файле данных содержится до 2 · 10 6 строк.Например, для отображения второго столбца я использую:
x = Import["path/to/datafile"];
ListLinePlot[x[[All, {1, 2}]]]
Время выполнения этой операции невыносимо велико.Чтобы отобразить переменный диапазон данных, я пытался использовать Manipulate
:
Manipulate[ListLinePlot[Take[x, numrows][[All, {1, 2}]]], {numrows, 1, Length[x]}]
Эта инструкция работает, но она быстро сканируется, когда я пытаюсь отобразить более нескольких тысяч строк.Как я могу ускорить его?
Некоторые дополнительные сведения:
- MATLAB отображает одинаковый объем данных на одном компьютере практически мгновенно, поэтому размер необработанных данных не должен бытьпроблема.
- Я уже пытался отключить сглаживание графики, но это никак не повлияло на скорость рендеринга.
- Использование
DataRange
во избежание Take
не помогает. - Использование
MaxPlotPoints
искажает слишком много сюжета, чтобы быть полезным. - Не использовать
Take
в Manipulate
не помогает. - Рендеринг, кажется, занимает огромное количествовремени.Запуск
Timing[ListLinePlot[Take[x,100000][[All, {1, 2}]]]]
возвращает 0.33
: это означает, что оценка Take
сама по себе является почти мгновенной, это рендеринг графика, который все замедляет. - Я запускаю Mathematica на Ubuntu Linux 11.10 с использованием fglrxводители.Заставить Mathematica использовать драйверы Mesa не помогло.
Есть подсказка?