Vector 上的 Breeze argmax:找不到隐式值
Breeze argmax on Vector: could not find implicit value
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
不会改变任何东西
我该如何解决这个问题或至少缩小根本原因的范围。
我通过将类型显式声明为 SparseVector
而不是 Vector
:
解决了这个问题
val counts: Map[Int, SparseVector[Int]] = ...
据我所知,这个解决方案远非显而易见,我仍然不清楚为什么 argmax()
似乎无法处理更通用的 Vector
class,但它确实有效.
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
不会改变任何东西
我该如何解决这个问题或至少缩小根本原因的范围。
我通过将类型显式声明为 SparseVector
而不是 Vector
:
val counts: Map[Int, SparseVector[Int]] = ...
据我所知,这个解决方案远非显而易见,我仍然不清楚为什么 argmax()
似乎无法处理更通用的 Vector
class,但它确实有效.