Ich benutze Python und NumPy und habe einige Probleme mit "transponieren":
import numpy as np
a = np.array([5,4])
print(a)
print(a.T)
Beim Aufrufen a.T
wird das Array nicht transponiert. Wenn a
zum Beispiel, [[],[]]
dann transponiert es richtig, aber ich brauche die Transponierung von [...,...,...]
.
Antworten:
Es funktioniert genau so, wie es soll. Die Transponierung eines 1D- Arrays ist immer noch ein 1D- Array! (Wenn Sie an Matlab gewöhnt sind, gibt es grundsätzlich kein Konzept für ein 1D-Array. Matlabs "1D" -Arrays sind 2D.)
Wenn Sie Ihren 1D-Vektor in ein 2D-Array verwandeln und dann transponieren möchten, schneiden Sie ihn einfach mit
np.newaxis
(oderNone
, sie sind gleich,newaxis
sind nur besser lesbar).Im Allgemeinen müssen Sie sich darüber jedoch nie Sorgen machen. Das Hinzufügen der zusätzlichen Dimension ist normalerweise nicht das, was Sie wollen, wenn Sie es nur aus Gewohnheit tun. Numpy sendet automatisch ein 1D-Array, wenn verschiedene Berechnungen durchgeführt werden. Normalerweise müssen Sie nicht zwischen einem Zeilenvektor und einem Spaltenvektor unterscheiden (keiner davon ist ein Vektor . Beide sind 2D!), Wenn Sie nur einen Vektor möchten.
quelle
np.arange
schnell ein 1D-Array erstellt. Es funktioniert genauso füra = np.array([5,4])
.()
keine zusätzliche Dimension in Numpy angeben. Wenna = np.arange(10)
danna
istarray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
wie von produzierta.__repr__()
. Dies ist ein eindimensionaler (dha.ndim --> 1
) Vektor, wie durch die eckigen Klammern angegeben[]
. Dasarray( ... )
wird nicht gesehen, wenn Sie entwederprint(a)
oder tuna.__str__()
.np.vstack()
Operation expliziter :print np.vstack(a)
.Verwenden Sie zwei Klammerpaare anstelle von einem. Dadurch wird ein 2D-Array erstellt, das im Gegensatz zu dem 1D-Array, das Sie erstellen, wenn Sie ein Klammerpaar verwenden, transponiert werden kann.
Gründlicheres Beispiel:
Verwenden Sie die
shape
Methode von numpy, um zu sehen, was hier vor sich geht:quelle
Für 1D-Arrays :
Sobald Sie verstehen, dass -1 hier "so viele Zeilen wie nötig" bedeutet, ist dies für mich die am besten lesbare Methode, ein Array zu "transponieren". Wenn Ihr Array eine höhere Dimensionalität aufweist, verwenden Sie einfach
a.T
.quelle
transpose
und dasreshape
Array auf unterschiedliche Weise ändern (die resultierende Bildform ist dieselbe, aber die Elemente sind unterschiedlich platziert).Sie können einen vorhandenen Vektor in eine Matrix konvertieren, indem Sie ihn in einen zusätzlichen Satz eckiger Klammern setzen ...
numpy hat auch eine
matrix
Klasse (siehe Array vs. Matrix ) ...quelle
numpy 1D Array -> Spalten- / Zeilenmatrix:
Und wie @ joe-kington sagte, können Sie ersetzen
None
mitnp.newaxis
zur besseren Lesbarkeit.quelle
Um ein 1d-Array in eine 2d-Spalte zu transponieren, können Sie Folgendes verwenden
numpy.vstack
:Es funktioniert auch für Vanille-Listen:
quelle
vstack
?np.concatenate([atleast_2d(_m) for _m in tup], 0)
. Es teilt das Array in (1,1) Arrays auf und verkettet diese! Dabei wird eine Kopie erstellt, während alle Umformungsansichten erstellt werden.Sie können nur ein 2D-Array transponieren. Sie können
numpy.matrix
damit ein 2D-Array erstellen. Dies ist drei Jahre zu spät, aber ich füge nur die möglichen Lösungen hinzu:quelle
np.matrix
ist nicht erforderlich und wird im Allgemeinen nicht empfohlen.Verwenden Sie stattdessen
arr[:,None]
, um einen Spaltenvektor zu erstellenquelle
Die Transponierung von
ist
Nun, der Code lautet:
Dies ist ein Link für weitere Informationen:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.transpose.html
quelle
Eine andere Lösung.... :-)
quelle
Ich konsolidiere nur den obigen Beitrag und hoffe, dass er anderen hilft, Zeit zu sparen:
Das folgende Array hat eine
(2, )
Dimension, es ist ein 1-D-Array,Es gibt zwei Möglichkeiten, ein 1-D-Array zu transponieren:
schneide es mit "np.newaxis" oder keiner.!
andere Schreibweise, die oben ohne
T
Operation.!Das Umschließen von [] oder die Verwendung von np.matrix bedeutet das Hinzufügen einer neuen Dimension.!
quelle
Wie einige der oben erwähnten Kommentare zeigen, handelt es sich bei der Transponierung von 1D-Arrays um 1D-Arrays. Eine Möglichkeit zum Transponieren eines 1D-Arrays besteht darin, das Array in eine Matrix wie folgt umzuwandeln:
quelle
Der Name der Funktion in
numpy
lautet column_stack .quelle
Es gibt eine Methode, die nicht in den Antworten, sondern in der Dokumentation der
numpy.ndarray.transpose
Methode beschrieben ist:Man kann tun:
Welches (imo) ist schöner als zu verwenden
newaxis
.quelle
Grundsätzlich besteht die Transponierungsfunktion darin, die Form und die Schritte des Arrays zu vertauschen:
Im Fall eines 1D-Numpy-Arrays (Rang-1-Array) sind Form und Schritte 1-Element-Tupel und können nicht ausgetauscht werden, und die Transponierung eines solchen 1D-Arrays gibt sie unverändert zurück. Stattdessen können Sie einen "Zeilenvektor" (numpy Array of Shape
(1, n)
) in einen "Spaltenvektor" (numpy Array of Shape(n, 1)
) transponieren . Um dies zu erreichen, müssen Sie zuerst Ihr 1D-Numpy-Array in einen Zeilenvektor konvertieren und dann die Form und die Schritte vertauschen (transponieren). Unten ist eine Funktion, die es tut:Beispiel:
Natürlich müssen Sie dies nicht auf diese Weise tun, da Sie ein 1D-Array haben und es
(n, 1)
durcha.reshape((-1, 1))
oder direkt in ein Array umformen könnena[:, None]
. Ich wollte nur zeigen, wie das Transponieren eines Arrays funktioniert.quelle
So habe ich bisher gelernt, dies für 1-D-Arrays kompakt und lesbar zu implementieren:
numpy.r_ und numpy.c_ übersetzen Slice-Objekte in Verkettung entlang der ersten bzw. zweiten Achse. Daher das Schneiden v2 [:, 0] beim Zurücktransponieren des vertikalen Arrays v2 in das horizontale Array h2
numpy.vstack entspricht der Verkettung entlang der ersten Achse, nachdem 1-D-Arrays der Form (N,) in (1, N) umgeformt wurden. Erstellt durch vsplit geteilte Arrays neu .
quelle