首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Scala:类型错配错误

Scala:类型错配错误
EN

Stack Overflow用户
提问于 2015-04-16 06:38:27
回答 2查看 767关注 0票数 1

我对scala很陌生,我正在按照K-指的教程使用k-means算法来练习它。

我对本教程的这一部分感到困惑:

代码语言:javascript
运行
复制
var newCentroids = pointsGroup.mapValues(ps => average(ps)).collectAsMap()  

这会导致类型不匹配错误,因为函数average需要一个Seq,而我们给它一个Iterable。我怎么才能解决这个问题?是什么导致了这个错误?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-16 07:20:25

在为Seq函数提供的解决方案中,我们可以很容易地用Iterable代替average

代码语言:javascript
运行
复制
def average(ps: Iterable[Vector]) : Vector = {
  val numVectors = ps.size
  var out = new Vector(ps.head.elements)
  ps foreach ( out += _)
  out / numVectors
}

甚至在恒定的空间里:

代码语言:javascript
运行
复制
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)
}
票数 2
EN

Stack Overflow用户

发布于 2015-04-16 06:54:16

好的SeqIterable的一个子类型,但反之亦然,所以在类型系统中不可能转换这些类型。

通过编写average(ps.toSeq)可以进行显式转换。此转换将迭代Iterable并将项目收集到Seq中。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29667079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档