/ / Qr faktorizácia v scala - scala, apache-iskra

Qr faktorizácia v scala - scala, apache-spark

Som tu nováčik a tu je nasledujúci príklad, ktorý sa snažím napodobniť.

    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)

A moja implementácia v Scala je:

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 je z iskry api https://spark.apache.org/docs/1.1.0/api/scala/index.html#org.apache.spark.mllib.linalg.distributed.RowMatrix

Keď sa pokúsim skompilovať vyššie uvedené, zobrazí sa chyba:

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

Nie som si istý, rozumiem chybe :(

odpovede:

0 pre odpoveď č. 1

V súčasnosti na internete neexistuje implementácia QR ()RowMatrix vo verejnej knižnici API, existuje však „tallSkinnyQR“. toto QR je optimalizované pre vysokú chudú maticu, čo je často prípad matíc veľkých dát (riadky sú oveľa chybnejšie ako stĺpce)

zavolať takto:

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

}

Mimochodom, nie je potrebné return vo Scale všeobecne.