例子如下:
def topTermsInTopConcepts(svd: SingularValueDecomposition[RowMatrix, Matrix],
numConcepts: Int,
numTerms: Int,
termIds: Array[String]): //这三行是输入的参数类型
Seq[Seq[(String, Double)]] = //这一行是返回的变量类型
{
val v = svd.V//这里是kxn矩阵
val topTerms = new ArrayBuffer[Seq[(String, Double)]]()
val arr = v.toArray
for (i <- 0 until numConcepts)
{
val offs = i * v.numRows
val termWeights = arr.slice(offs, offs + v.numRows).zipWithIndex
//这里的意思是(i·v.numRows,(i+1)·v.numRows)
val sorted = termWeights.sortBy(-_._1)//减去某个元素的第一个成员
topTerms += sorted.take(numTerms).map{case (score, id) => (termIds(id), score) }
}
topTerms//最终返回(id,score)的组合
}
我们会发现,这份代码的score和id都没有进行定义就直接拿来用了。
这里的score和id称为“模式变量”,是对前面的结果进行模式匹配的,所以不需要进行定义,也有资料称为“占位符”