Scala Breeze 隐式 CanMapValues

Scala Breeze implicit CanMapValues

我在 Scala 中使用 Breeze 库进行矩阵运算。一切看起来都不错,但在编译时找不到隐式:

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 = ',')

我不确定如何继续 - 我在 Breeze 代码中寻找默认的 CanMapValues 但找不到。我该如何解决这个问题?谢谢!

要解决该问题,您可以将 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