2013-03-25 3 views
1

Пожалуйста, помогите понять следующий пример использования Бриз. В приведенном ниже коде есть как вызовы метода объекта Scala, такие как f.subplot(0), f.saveas и т. Д., А также вызовы функций: linspace(0.0,1.0), plot(x, x :^ 2.0).Синтаксис Scala: Breeze (scalanlp.org)?

Как обычно, методы объекта описаны в создаваемой документации: http://www.scalanlp.org/api/index.html#breeze.plot.Plot

Вопросы:

1) Где я могу найти спецификации вызовов функции: linspace(0.0,1.0), plot(x, x :^ 2.0)? Насколько мне известно, для создания Бриз использует JFreeChart (http://www.jfree.org/jfreechart/download.html). Возможно, эти linspace и plot являются объектами Java, импортированными из пакета JFreeChart?

2) Что означает x :^ 3.0?

import breeze.plot._ 

val f = Figure() 
val p = f.subplot(0) 
val x = linspace(0.0,1.0) 
p += plot(x, x :^ 2.0) 
p += plot(x, x :^ 3.0, '.') 
p.xlabel = "x axis" 
p.ylabel = "y axis" 
f.saveas("lines.png") // save current figure as a .png, eps and pdf also supported 

ответ

0

Вы можете найти linspace спецификацию в объекте ветер пакет linalg и plot находится в объекте пакета plog:

http://www.scalanlp.org/api/index.html#breeze.linalg.package https://github.com/scalanlp/breeze/blob/master/math/src/main/scala/breeze/linalg/package.scala#L127

/** 
    * Generates a vector of linearly spaced values between a and b (inclusive). 
    * The returned vector will have length elements, defaulting to 100. 
    */ 
    def linspace(a : Double, b : Double, length : Int = 100) : DenseVector[Double] = { 
    val increment = (b - a)/(length - 1) 
    DenseVector.tabulate(length)(i => a + increment * i) 
    } 

http://www.scalanlp.org/api/index.html#breeze.plot.package https://github.com/scalanlp/breeze/blob/master/viz/src/main/scala/breeze/plot/package.scala#L24

/** 
    * Plots the given y versus the given x with the given style. 
    * 
    * @param x X-coordinates, co-indexed with y (and indexed by keys of type K). 
    * @param y Y-coordinates, co-indexed with x (and indexed by keys of type K). 
    * @param style Matlab-like style spec of the series to plot. 
    * @param name Name of the series to show in the legend. 
    * @param labels Optional in-graph labels for some points. 
    * @param tips Optional mouse-over tooltips for some points. 
    */ 
    def plot[X,Y,V](x: X, y: Y, style : Char = '-', colorcode : String = null, name : String = null, 
        lines : Boolean = true, shapes : Boolean = false, 
        labels : (Int) => String = null.asInstanceOf[Int=>String], 
        tips : (Int) => String = null.asInstanceOf[Int=>String]) 
       (implicit xv: DomainFunction[X,Int,V], 
        yv: DomainFunction[Y, Int, V], vv: V=>Double):Series = new Series { 
    ... 

Это поэлементно экспоненцирование. Таким образом, x :^ 3.0 вернет x с каждым элементом на третью мощность. В приведенном примере x является DenseVector из 100 значений между 0 и 1. так что x :^ 3.0 предоставит вам еще DenseVector из 100 значений от 0 до 1, но они будут приняты к третьей мощности, что делает хороший график.

+0

Спасибо! Итак, какую стратегию нужно использовать для поиска таких функций, как 'linspace' и' plot' в созданных API-документах? И 'x:^3.0' является анонимной (лямбда-функцией)? –

+1

Нет, это стандартная операция. Вы можете найти в источнике в NumericOps. Есть какая-то причудливая scala, что-то, чтобы это не относилось к нескольким типам, кроме DenseVector, но вы должны быть в состоянии получить суть того, что она делает. https://github.com/scalanlp/breeze/blob/master/math/src/main/scala/breeze/linalg/NumericOps.scala#L51 – Noah

+1

И какую стратегию следует использовать для определения определений функций типа 'linspace' и 'plot' в созданных API-документах? –

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