/ / Faktoryzacja Qr w Scali - Scala, Apache-Spark

Faktoryzacja Qr w scala - scala, apache-spark

Jestem początkującym tutaj i oto następujący przykład, próbuję się replikować ..

    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 implementacja w Scali to:

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

Podczas próby skompilowania powyższego pojawia się błąd:

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 jestem pewien, rozumiem błąd :(

Odpowiedzi:

0 dla odpowiedzi № 1

Obecnie na stronie nie ma implementacji QR ()RowMatrix w publicznej bibliotece API, jednak istnieje „tallSkinnyQR”. ten kod QR jest zoptymalizowany pod kątem wysokiej, wąskiej matrycy, co często ma miejsce w przypadku matryc bigdata (wiersze są znacznie bardziej błędne niż kolumny)

zadzwoń w ten sposób:

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

}

Nawiasem mówiąc, nie ma takiej potrzeby return ogólnie w Scali.