gpt4 book ai didi

Scala 错误找不到参数的隐式值

转载 作者:行者123 更新时间:2023-12-02 03:47:22 25 4
gpt4 key购买 nike

我有函数flagVectorOutlier,如下面的代码所示。我使用 Breeze 的 DenseVectorDenseMatrix 对象来计算 distance 的值。我希望按照函数签名上的编码,获得 Spark RDD[(Double, Boolean)]miinvCovMatrix 分别是 Breeze 的 DenseVector[Double]DenseMatrix[Double]:

  def flagVectorOutlier(testVectors: RDD[(String, SparkVector)], distanceThreshold: Double): RDD[(Double, Boolean)] = {
val testVectorsDenseRDD = testVectors.map { vector => DenseVector(vector._2.toArray)}
val mahalanobisDistancesRDD = testVectorsDenseRDD.map { vector =>
val distance = DenseVector[Double](DenseVector(Transpose(vector - mi) * invCovMatrix) * DenseVector(vector - mi)).toArray
(distance(0), if(distance(0) >= distanceThreshold) true else false)
}

mahalanobisDistancesRDD
}

编译器最终向我显示以下 2 个错误:

Error:(75, 93) could not find implicit value for parameter op: breeze.linalg.operators.OpMulMatrix.Impl2[breeze.linalg.DenseVector[breeze.linalg.Transpose[breeze.linalg.DenseVector[Double]]],breeze.linalg.DenseVector[breeze.linalg.DenseVector[Double]],That]
val distance = DenseVector[Double](DenseVector(Transpose(vector - mi) * invCovMatrix) * DenseVector(vector - mi)).toArray
^

Error:(75, 93) not enough arguments for method *: (implicit op: breeze.linalg.operators.OpMulMatrix.Impl2[breeze.linalg.DenseVector[breeze.linalg.Transpose[breeze.linalg.DenseVector[Double]]],breeze.linalg.DenseVector[breeze.linalg.DenseVector[Double]],That])That.
Unspecified value parameter op.
val distance = DenseVector[Double](DenseVector(Transpose(vector - mi) * invCovMatrix) * DenseVector(vector - mi)).toArray
^

我错过了什么?我正在考虑以这种方式在 Breeze 的 DenseVector 之间进行乘法是可能的。

最佳答案

如果您仔细查看错误消息,它会告诉您出了什么问题。

(implicit op: OpMulMatrix.Impl2[
DenseVector[Transpose[DenseVector[Double]]],
DenseVector[DenseVector[Double]],
That])

几乎可以肯定,乘法的操作数不是您想要的。 LHS 是一个 DenseVector,其元素是转置的 DenseVector。 RHS 是一个DenseVector[DenseVector[Double]]。您的外部 DenseVector(..) 调用将其参数包装在新的 DenseVector 中,而不是将参数转换为 DenseVector。

我相信这就是您想要的:

val diff = (vector - mi).toDenseVector
(diff.t * invCovMatrix * diff)

关于Scala 错误找不到参数的隐式值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29009094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com