Scala中的Qr分解

时间:2014-12-30 07:03:26

标签: scala apache-spark

我是新手,这是以下示例,我试图复制..

    val A = DenseMatrix((1.0, 1.0, 1.0), (4.0, 2.0, 1.0), (16.0, 4.0, 1.0))
    val QR(_Q, _R) = qr(A)

我在scala中的实现是:

object qr_factorization {
  def qr_factor(A: RowMatrix,nrows: Int, ncols: Int):(Any, Any) = {
    val rows = A.rows.map(_.toArray).collect().flatten
    val dense_matrix = DenseMatrix.fill(nrows, ncols)(rows)
    println(dense_matrix)
    val QR(_Q, _R) = qr(dense_matrix)
    return (_Q,_R)

  }

}

RowMatrix来自spark api https://spark.apache.org/docs/1.1.0/api/scala/index.html#org.apache.spark.mllib.linalg.distributed.RowMatrix

当我尝试编译上面的内容时,我收到错误:

could not find implicit value for parameter impl: breeze.linalg.qr.Impl[breeze.linalg.DenseMatrix[Array[Double]],VR]
[error]     val QR(_Q, _R) = qr(dense_matrix)
[error]                        ^
[error] one error found
[error] (compile:compile) Compilation failed

不确定,我理解错误:(

1 个答案:

答案 0 :(得分:0)

目前公共API库中的RowMatrix上没有QR()实现,但是有“tallSkinnyQR”。这个QR针对高瘦的矩阵进行了优化,这通常是bigdata矩阵的情况(行比列更多)

这样打电话:

def qr_factor(A: RowMatrix,nrows: Int, ncols: Int):(Any, Any) = {
.....
.....
val QR= qr(dense_matrix)
(QR._1,QR._1)

 }

顺便说一下,Scala中一般不需要return