2015-11-13 51 views
0

有大量的圓形Scala中的錯誤信息could not find implicit value其他問題。答案是非常具體的,不適用於這個特定的問題。微風argmax:找不到內含價值

在斯卡拉微風,我想申請argmaxSparseVector[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內不會改變任何東西

我怎麼能解決這個問題,或者至少縮小的根本原因。

回答

0

我已經明確聲明類型爲SparseVector,而不是Vector解決問題:

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

據我瞭解,這個解決方案是遠離明顯,爲什麼argmax()似乎無法仍不清楚我以處理更通用的Vector類,但它的工作原理。

+0

我覺得微風的代碼十分困難的導航,但我認爲該錯誤信息是很清楚。 argmax不能找到它需要的類型Vector。在argmax的實施看簡單地說,它似乎需要一個隱式類型'CanTraverseKeyValuePairs'它可以很容易地類型稀疏/密集矢量被發現的,但對於矢量沒有實現。 – melps

+0

這可能是真實的,如果你有充分把握implicits的使用(在微風)。 – Carsten

+0

說實話,它使用類型類時 – melps