2015-03-22 2 views
2

Я использую код как пример ниже, чтобы сделать базовое построение списка значений из F # Interactive. При построении большего количества точек время, необходимое для отображения, резко возрастает. В приведенных ниже примерах в течение 4 секунд отобразится 10^4 точки, тогда как 4.10^4 точки проходят проверку на терпение на 53 секунды для отображения. В целом это примерно так, как если бы время построения N точек было в N^2.FSharpChart с Windows.Forms очень медленно для многих точек

В результате я, вероятно, добавить интерполяционный слой перед этим кодом, но

1) Интересно, если кто-то, кто знает, как работает FSharpChart и Windows.Forms могли бы объяснить, что является причиной такого поведения ? (Данные ограничены, поэтому одна вещь, которая, как представляется, исключает отображение, необходимо настроить шкалу.)

2) Есть ли простое средство, отличное от интерполяции данных?

let plotl (f:float list) = 
    let chart = FSharpChart.Line(f, Name = "") 
      |> FSharpChart.WithSeries.Style(Color = System.Drawing.Color.Red, BorderWidth = 2) 
    let form = new Form(Visible = true, TopMost = true, Width = 700, Height = 500) 
    let ctl = new ChartControl(chart, Dock = DockStyle.Fill) 
    form.Controls.Add(ctl) 

let z1 = [for i in 1 .. 10000 do yield sin(float(i * i))] 
let z2 = [for i in 1 .. 20000 do yield sin(float(i * i))] 
plotl z1 
plotl z2 
+0

Это технический алгоритм O (n), но современные процессоры имеют 4 различных Оса. Чем больше набор данных, тем ниже вероятность того, что данные будут помещены в кеш процессора. Это будет действительно танк, когда он исходит из очень медленной ОЗУ. Обходным путем является только сбор меньших данных, 40 тыс. Точек - это гораздо больше, чем нужно для точной диаграммы. –

ответ

4

Прежде всего, FSharpChart это имя, используемое в старой версии библиотеки. Последняя версия называется F# Charting, поставляется с новой документацией и использует только Chart.

Чтобы ответить на ваш вопрос, Chart.Line и Chart.Points довольно медленны для большого количества точек. В библиотеке также есть Chart.FastLine и Chart.FastPoints (которые не поддерживают столько функций, но быстрее). Итак, попробуйте получить последнюю версию F # Charting и использовать «Fast» версию метода.

+0

Я только что установил библиотеку F # Charting, но моя маленькая сантехника для WIndows.Forms теперь сломана с сообщением: «Тип« FSharp.Charting.ChartTypes.GenericChart »несовместим с типом« MSDN.FSharp.Charting .ChartTypes.GenericChart '". Является ли решение следовать инструкциям на веб-сайте F # Charting относительно приложений WPF (здесь: http://fsharp.github.io/FSharp.Charting/UsingChartsInWPF.html)? – imateapot

+0

Хорошо, просто нужно быть осторожным с различными ссылками, см. [Этот ответ] (http://stackoverflow.com/a/21139525/741956). Принимая ваш ответ: с FastLIne я могу (думаю, что я) отображать нелепое количество очков за короткое время. Спасибо! – imateapot

 Смежные вопросы

  • Нет связанных вопросов^_^