簡體   English   中英

Vector上的Breeze argmax:找不到隱式值

[英]Breeze argmax on Vector: could not find implicit value

還有很多其他問題,導致錯誤消息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類,但是它可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM