[英]Scala: type mismatch error
我是新來Scala和我與K-means算法練了從教程以下k均值
我對本教程的這一部分感到困惑:
var newCentroids = pointsGroup.mapValues(ps => average(ps)).collectAsMap()
這會導致類型不匹配錯誤,因為函數average
需要一個Seq
,而我們給它一個Iterable
。 我怎樣才能解決這個問題? 是什么導致此錯誤?
Seq
是Iterable
的子類型,但反之亦然,因此不能在類型系統中轉換這些類型。
通過編寫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.