2016-10-15 123 views
0

我使用Breeze库进行Scala中的矩阵操作。一切看起来不错,但它不能在编译时发现的隐式:Scala微风隐式CanMapValues

could not find implicit value for parameter bf: breeze.linalg.support.CanMapValues[breeze.linalg.Matrix[Int],Int,Double,That] 

有问题的功能是这样的:

import breeze.linalg._ // this is the only import 
def writeMatrixToCsv(path: String, matrix: Matrix[Int]) = csvwrite(new File(path), matrix.mapValues(_.toDouble), separator = ',') 

我不知道如何进行 - 我在微风中寻找默认CanMapValues代码,但无法找到它。我该如何解决这个问题?谢谢!

+0

你使用任何进口呢?这是什么csvwrite? – michaJlS

+0

嘿@michaJlS,csvwrite是Breeze方法(请参阅https://github.com/scalanlp/breeze/wiki/Linear-Algebra-Cheat-Sheet)。我在问题中添加了我的导入。问题出在.mapValues中。 – ticofab

回答

0

要解决该问题,可以将CanMapValues类型的隐式参数添加到writeMatrixToCsv函数中。然后它会编译。我可以看到,Matrix是一个特征,它不提供一般隐含的CanMapValues,因此您可能必须提供一个用于您将使用的具体矩阵。

def writeMatrixToCsv(path: String, matrix: Matrix[Int])(
    implicit bf:support.CanMapValues[Matrix[Int], Int, Double, Matrix[Double]] 
) = csvwrite(
    new File(path), 
    matrix.mapValues(_.toDouble), 
    separator = ',' 
) 

CanMapValues位于support package object

+0

它编译!我不知道为什么,正如你所说,具体的CanMapValues没有在任何地方实现。那么现在它在哪里发现它的含蓄,为什么它现在编译? – ticofab

+1

在这种情况下,封闭在另一个func中的csvwrite没有机会找到有效的隐式值,因此必须通过param“让它进入”。尝试使用它,让看看会发生什么。对于扩展Matrix的某些类,有'CanMapValues'。 – michaJlS

+0

真棒。谢谢! – ticofab