Scala: синтаксис Breeze (scalanlp.org)?

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

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

Вопросы:

1) Где я могу найти спецификацию вызовов функций: linspace(0.0,1.0) , plot(x, x :^ 2.0)? Насколько мне известно, для построения графиков Breeze использует 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

person Anton Ashanin    schedule 25.03.2013    source источник


Ответы (1)


1 Спецификацию linspace можно найти в объекте пакета breeze 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 {
    ...

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

person Noah    schedule 25.03.2013
comment
Спасибо! Итак, какую стратегию следует использовать для поиска таких функций, как linspace и plot, в сгенерированных документах API? А x :^ 3.0 - это анонимная (лямбда) функция? - person Anton Ashanin; 25.03.2013
comment
Нет, это просто стандартная операция. Вы можете найти в источнике в разделе NumericOps. Есть какая-то причудливая scala, а что нет, чтобы это применялось к нескольким типам, кроме DenseVector, но вы должны понять суть того, что она делает. github.com/ scalanlp/breeze/blob/master/math/src/main/scala/ - person Noah; 25.03.2013
comment
И какую стратегию следует использовать для поиска определений таких функций, как linspace и plot, в сгенерированных документах API? - person Anton Ashanin; 25.03.2013
comment
Я либо иду в проект Github и ищу, либо использую SBT/Intellij для просмотра исходников. - person Noah; 25.03.2013
comment
кто-нибудь знает, почему этот пример кода работает только в интерпретаторе scala, но не компилируется как объект scala в eclipse? - person bhomass; 23.08.2016