簡體   English   中英

Scala:類型不匹配錯誤

[英]Scala: type mismatch error

我是新來Scala和我與K-means算法練了從教程以下k均值

我對本教程的這一部分感到困惑:

var newCentroids = pointsGroup.mapValues(ps => average(ps)).collectAsMap()  

這會導致類型不匹配錯誤,因為函數average需要一個Seq ,而我們給它一個Iterable 我怎樣才能解決這個問題? 是什么導致此錯誤?

SeqIterable的子類型,但反之亦然,因此不能在類型系統中轉換這些類型。

通過編寫average(ps.toSeq)可以進行顯式轉換。 此轉換將迭代Iterable並將項目收集到Seq

在提供的average功能解決方案中,我們可以輕松地用Iterable替換Seq

def average(ps: Iterable[Vector]) : Vector = {
  val numVectors = ps.size
  var out = new Vector(ps.head.elements)
  ps foreach ( out += _)
  out / numVectors
}

甚至在恆定的空間中:

def average(ps: Iterable[Vector]): Vector = {
  val numVectors = ps.size

  val vSize = ps.head.elements.length

  def element(index: Int): Double = ps.map(_(index)).sum / numVectors

  new Vector(0 until vSize map element toArray)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM