在Scala Breeze中实现elementwise UFunc

时间:2017-09-13 14:28:49

标签: matrix scala-breeze

我正在尝试为Scala Breeze矩阵实现我自己的元素UFunc,以便该函数可以应用于矩阵的每个元素。使用Breeze.numerics包作为指南我尝试过:

object step extends UFunc with MappingUFunc {
implicit object stepImplDouble extends Impl[Double, Double] {
  def apply(x: Double) = if (x >= 0.5) 1.0 else 0.0
}

看起来很简单,对吧?我试图使用如下函数:

val H: BDM[Double] = step((M(::,*) + bias).t)

即。将一个按元素的函数元素应用于矩阵,给出一个输出H.但是代码在编译时会出错:

Error:(60, 26) could not find implicit value for parameter impl: dev.elm.step.Impl[breeze.linalg.DenseMatrix[Double],VR]
  case "step" => step((M(::, *) + bias).t)
Error:(60, 26) not enough arguments for method apply: (implicit impl: dev.elm.step.Impl[breeze.linalg.DenseMatrix[Double],VR])VR in trait UFunc.
Unspecified value parameter impl.
  case "step" => step((M(::, *) + bias).t)

这与我在上一个问题中提出的错误非常相似。听起来它可能需要矩阵参数,但我认为这些都是在MappingUFunc特性中处理的。任何帮助赞赏!感谢

1 个答案:

答案 0 :(得分:0)

因为这是一个对象,所以声明顺序很重要。 将它放在代码中比第一次调用更高,或者将其拉出到自己的文件中。