J'ai un Matrix qui contient 5 colonnes au total. Ce que je veux faire, c'est imprimer toutes les colonnes du Matrix et pas seulement les 2 premières comme indiqué ci-dessous:

val V: Matrix = svd.V  // The V factor is a local dense matrix.
println(V)

Donne la sortie suivante:

-1.0237272594782074E-4  -1.7078345817841522E-4  ... (5 total)
-3.0092323368453486E-4  1.1734582822947035E-4   ...
-8.783338552190558E-4   -0.0017472726007059717  ...
-1.1383724568414156E-4  -4.3548729172213584E-4  ...
-1.1693767421110056E-4  -2.418383762772299E-4   ...
-1.7743361361571285E-4  1.8480473527241232E-4   ...
-1.4886423625353203E-4  2.099922614106897E-4    ...
-8.626317174508992E-4   -9.12157272113119E-4    ...
2
Giorgos Myrianthous 21 avril 2017 à 15:28

3 réponses

Meilleure réponse

La méthode toString par défaut (qui est appelée lorsque vous utilisez println) n'affiche pas toutes les lignes / colonnes. Vous devez explicitement utiliser l'autre toString méthode qui prend les lignes max et la largeur max comme paramètre:

println(V.toString(5,Int.MaxValue)) //Displays 5 first rows
5
cheseaux 21 avril 2017 à 13:19

La conversion d'une matrice en RDD puis l'utilisation de foreach devraient faire le travail.

val V: Matrix = svd.V  // The V factor is a local dense matrix.       
val Vrdd = sc.parallelize(V.rowIter.toSeq)
Vrdd.take(8).foreach(println)

Imprimera les 8 premières lignes et toutes les colonnes

[-1.023727259478234E-4,-1.7078345817841533E-4,3.0839310929699345E-4,1.2892270831815856E-4,-3.2874234098349364E-4]
[-3.009232336845317E-4,1.173458282294655E-4,2.737768257608553E-4,1.0077068531267255E-5,1.6105536507623856E-4]
[-8.783338552190533E-4,-0.0017472726007059787,9.136695463186932E-4,3.2887292883284746E-4,0.0018690404940346112]
[-1.1383724568414083E-4,-4.354872917221425E-4,-3.621489985336155E-5,2.70169363438746E-5,-5.056654658786913E-4]
[-1.1693767421109712E-4,-2.418383762772343E-4,1.952750723593368E-4,3.5328858284551095E-5,6.579474844822932E-5]
[-1.774336136157171E-4,1.8480473527241484E-4,1.4397978561015781E-6,-1.4225923969798783E-4,-4.2210858440213316E-4]
[-1.4886423625353317E-4,2.0999226141068627E-4,-5.354866549487416E-5,1.2258687855367864E-4,4.4050687210353404E-4]
[-8.626317174509001E-4,-9.121572721131233E-4,-0.004282058263767252,0.004032670016181569,-0.001070431177048715]
0
Giorgos Myrianthous 21 avril 2017 à 13:08

Il existe probablement un moyen plus sympa, mais une boucle for imbriquée pourrait faire l'affaire:

for (row <- V) {
    for (column <- row) {
        println(column);
    }
}

Recherche: https://www.tutorialspoint.com/scala/scala_arrays.htm

-1
cyberclaws 21 avril 2017 à 12:55