Ich habe ein Problem mit Ipython - Numpy. Ich möchte folgende Operation durchführen:
%Vor%wobei x zu R ^ n gehört, und x ^ T die Transponieroperation auf Vektor x. x wird aus einer txt-Datei mit folgender Anweisung extrahiert:
%Vor%Das Problem ist, dass wenn ich die Transponierfunktion verwende
%Vor%und verwendet die Form-Funktion, um die Größe von x zu kennen, ich bekomme die gleichen Dimensionen für x und x ^ T. Numpy gibt die Größe mit einem Großbuchstaben L nach jeder Dimension an. z.B.
%Vor%Weiß jemand, wie man das löst und x ^ T.x als Matrixprodukt berechnet?
Danke!
Was np.transpose
macht, ist das Shape-Tupel umzukehren, dh Sie geben ihm ein Array von Form (m, n)
, es gibt ein Array von Form (n, m)
zurück, Sie füttern es ein Array von Form (n,)
... und Sie erhalten dasselbe Array mit der Form (n,)
zurück.
Was Sie implizit erwarten, ist, dass numpy Ihren 1D-Vektor als 2D-Array mit der Form (1, n)
annimmt, das in einen (n, 1)
-Vektor transponiert wird. Numpy wird das nicht alleine machen, aber Sie können sagen, dass es das ist, was Sie wollen, z. B .:
Für Starter L
bedeutet nur, dass der Typ ein langer int ist. Dies sollte kein Problem sein. Sie müssen jedoch zusätzliche Informationen zu Ihrem Problem angeben, da ich es nicht mit einem einfachen Testfall reproduzieren kann:
Es ist wahrscheinlich etwas Subtiles in Ihrem speziellen Fall passiert, das Probleme verursacht. Können Sie den Inhalt der Datei, die Sie lesen, in x
?
Ich hatte das gleiche Problem, ich habe eine numpige Matrix benutzt, um es zu lösen:
%Vor%Obwohl die Verwendung nummerischer Matrizen möglicherweise nicht der beste Weg ist, um Ihre Daten aus einer Codierperspektive darzustellen, ist es ziemlich gut, wenn Sie viele Matrixoperationen durchführen wollen!
Dies ist entweder das innere oder äußere Produkt der beiden Vektoren, abhängig von der Ausrichtung, die Sie ihnen zuweisen. So berechnen Sie, ohne x
zu ändern.
Die Datei 'myfile.txt' enthält Zeilen wie
%Vor%Hier ist der Code, den ich ausführe:
%Vor%Und ich bekomme als Ergebnis
%Vor%Ich würde erwarten, dass eines der beiden letzten Ergebnisse ein Skalar anstelle eines Vektors ist, weil x ^ T.x (oder x.x ^ T) einen Skalar ergeben sollte.