【问题标题】:Scala Breeze implicit CanMapValuesScala Breeze 隐式 CanMapValues
【发布时间】:2016-10-15 22:23:10
【问题描述】:

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

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,但找不到。我该如何解决这个问题?谢谢!

【问题讨论】:

标签: scala matrix implicit scala-breeze


【解决方案1】:

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

【讨论】:

  • 它编译!我不知道为什么:正如你所说,具体的 CanMapValues 没有在任何地方实现。那么它现在在哪里找到它的隐含,以及为什么它现在编译?
  • 在这种情况下,包含在另一个 func 中的 csvwrite 没有机会找到有效的隐式值,因此您必须通过参数“让它进来”。尝试使用它,看看会发生什么。扩展Matrix 的某些类有CanMapValues
  • 太棒了。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-12-08
  • 2016-12-12
  • 2014-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多