Wann wird ndarray.T aktualisiert? [Duplikat]
In Numpy können Sie ein ndarraymit der transpose()Methode transponieren , aber es hat auch ein Attribut T.
Wenn a ndarraygeändert wird, wird nicht nur der Rückgabewert der transpose()Methode, sondern auch das Attribut gleichzeitig Tautomatisch aktualisiert.
ndarray.transpose()ist eine Funktion, daher ist es nicht zu wundern. Da Tes sich jedoch nicht um eine Funktion handelt, sondern um ein bloßes Attribut, muss sie vor dem Zugriff aktualisiert werden.
Aktualisieren alle Numpy-Funktionen und -Methoden das
TAttribut bei jedem Aufruf?Wenn ja warum? Es ist wahrscheinlich, dass beim Umgang mit großen Matrizen die Rechenkosten für jede Operation sehr hoch sind, selbst wenn sie für die Umsetzung nicht relevant sind. Ist es nicht sinnvoller,
transpose()nur bei Bedarf aufzurufen , anstatt dasTAttribut jedes Mal neu zu schreiben?
Dies ist ein einfaches Beispiel:
>>> import numpy as np
>>> x = np.array([[1, 2, 3],
... [4, 5, 6]])
...
>>> x
array([[1, 2, 3],
[4, 5, 6]])
>>> x.T
array([[1, 4],
[2, 5],
[3, 6]])
Natürlich xändert sich x.Tauch der Betrieb gleichzeitig . Wann wurde x.Taktualisiert? Hat x.__imul__()es getan ?
>>> x *= 100
>>> x
array([[100, 200, 300],
[400, 500, 600]])
>>> x.T
array([[100, 400],
[200, 500],
[300, 600]])
Antworten
Die TEigenschaft, die dieselbe ist wie .transpose()nur eine Ansicht mit geänderter Form (und Schritten). Der Speicher des tatsächlichen Inhalts ist derselbe (Sie können dies beispielsweise mit a id(x[0,0])und id(x.T[0,0])überprüfen), aber die Objekteigenschaften geben an, numpywie er interpretiert werden soll. Bei einem 2D-Array sind die Schritte und die Form genau umgekehrt zum ursprünglichen Array. Weitere Informationen zu Schritten finden Sie in den Dokumenten . Aus diesem Grund sind die Dinge unmittelbar, wenn sich der Inhalt ändert - die Speicherzelle erhält die neue Nummer, aber die Interpretation des .TArrays ändert sich nicht.