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 № 1Obecnie 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.