Vector上的Breeze argmax:无法找到隐含值

时间:2015-11-13 10:09:17

标签: scala scala-breeze

Scala中的错误消息could not find implicit value还有很多其他问题。答案非常具体,不适用于此特定问题。

在Scala Breeze中,我正在尝试将argmax应用于SparseVector[Int]。根据文档(和直觉),这很容易与

一起使用
argmax(SparseVector.zeros[Int](5))
导入breeze.linalg._

我的实际测试代码如下所示:

import breeze.linalg.{Vector, argmax, sum}

val counts: Map[Int, Vector[Int]] = ...
counts
  .filter(e => sum(e._2) > 10)
  .take(100)
  .map(e => (e._1, argmax(e._2)))
  .foreach(println)

但是,编译器会抛出以下错误消息:

Error:(41, 37) could not find implicit value for parameter impl: breeze.linalg.argmax.Impl[breeze.linalg.Vector[Int],VR]
.map(e => (e._1, argmax(e._2)))
                       ^

或多或少令人惊讶的观察结果:

  • sum(e._2)似乎编译正常。
  • 在内部使用DenseVector代替SparseVector不会改变任何内容

我怎样才能解决这个问题,或者至少缩小根本原因。

1 个答案:

答案 0 :(得分:0)

我通过明确声明类型为SparseVector而不是Vector来解决了这个问题:

val counts: Map[Int, SparseVector[Int]] = ...

据我了解,这个解决方案远非显而易见,我仍然不清楚为什么argmax()似乎无法处理更通用的Vector类,但它有效。