我是新手,这是以下示例,我试图复制..
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
不确定,我理解错误:(
答案 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
。