2016-12-04 3 views
0

Ich möchte zwei Matrizen multiplizieren. A * B funktioniert gut. Aber was ich wirklich will, ist A.t * B. Aber nach dem Transponieren von A, wird das Ergebnis Transpose [Matrix [Double]] anstelle von Matrix [Double]. Daher wird die Operation vom Compiler abgelehnt. Mathematisch ist die Transponierte einer Matrix jedoch eine andere Matrix, und es sollte vollkommen in Ordnung sein, diese durch eine andere Matrix zu multiplizieren. Wie wird das im Wind richtig gemacht?Scala Brise multiplizieren Matrix durch Transponieren

Antwort

0

A.t.asInstanceOf [DenseMatrix [Double]] hat es geschafft.

+0

Wenn 'A' den Typ' DenseMatrix [Double] 'hat, dann sollte' A.t' auch eine 'DenseMatrix [Double]' sein. Wenn Sie also wissen, dass 'A' abgelaufen ist, geben Sie' DenseMatrix [Double] 'ein (was Sie anscheinend tun), dann können Sie einfach' A' kompilieren lassen, indem Sie 'DenseMatix [Double]' eingeben. Dadurch können Sie "A.t * B" ohne Besetzung spielen. –

+0

A hat bereits den Typ DenseMatrix [Double]. Trotzdem hatte ich dieses Problem vor dem Casting. – bhomass

+0

Hat es * Kompilierzeit * Typ 'DenseMatrix [Double]'? Ich habe 'At' ausprobiert (wobei' A' den Kompilierzeit-Typ 'DenseMatrix [Double]' hat) und das Ergebnis war eine andere 'DenseMatrix [Double]', während, wenn 'A' den Kompilierzeit-Typ' Matrix [Double] hat ', dann ergibt' At' eine Transposition [Matrix [Double]] '. –

Verwandte Themen