使用ScalaNLP和Breeze乘以矩阵

时间:2015-11-12 13:53:44

标签: scala scala-breeze scala-nlp

在下面的方法中,我尝试将DenseVector与DenseVector相乘,其中DenseVector之一是方法参数:

   def mult(features : DenseVector[Array[Int]]) = {

     val dv = new DenseVector(Array(-30, 20 , 20))

     features :* dv

   }

这会导致编译错误:

Multiple markers at this line:
◾could not find implicit value for parameter op: breeze.linalg.operators.OpMulScalar.Impl2[breeze.linalg.DenseVector[Array[Int]],breeze.linalg.DenseVector[Int],That]
◾not enough arguments for method :*: (implicit op: breeze.linalg.operators.OpMulScalar.Impl2[breeze.linalg.DenseVector[Array[Int]],breeze.linalg.DenseVector[Int],That])That. Unspecified value parameter op.
◾could not find implicit value for parameter op: breeze.linalg.operators.OpMulScalar.Impl2[breeze.linalg.DenseVector[Array[Int]],breeze.linalg.DenseVector[Int],That]
◾not enough arguments for method :*: (implicit op: breeze.linalg.operators.OpMulScalar.Impl2[breeze.linalg.DenseVector[Array[Int]],breeze.linalg.DenseVector[Int],That])That. Unspecified value parameter op.

此代码编译:

def mult(features : breeze.linalg.DenseVector[Array[Int]]) = {

     val dv1 = new breeze.linalg.DenseVector(Array(-30, 20 , 20))
     val dv2 = new breeze.linalg.DenseVector(Array(-30, 20 , 20))

     dv1 :* dv2 

   }

如何将features参数复用dv?我不确定编译器错误的含义,是否与我没有在方法中指定DenseVector的大小有关?

1 个答案:

答案 0 :(得分:2)

我怀疑你的方法签名是错误的。

尝试

def mult(features : DenseVector[Int])

而不是

def mult(features : DenseVector[Array[Int]]).

在您的情况下,您有一个向量,其中每个条目的类型为Array [Int]。