Quando viene aggiornato ndarray.T? [duplicare]
In Numpy, puoi trasporre a ndarraycon il transpose()metodo, ma ha anche un attributo T.
Quando a ndarrayviene modificato, non solo il valore di ritorno del transpose()metodo, ma anche l'attributo Tviene aggiornato automaticamente allo stesso tempo.
ndarray.transpose()è una funzione, quindi non c'è da meravigliarsi. Tuttavia, Tnon è una funzione, ma un semplice attributo, quindi deve essere aggiornato prima dell'accesso.
Tutte le funzioni e i metodi di Numpy aggiornano l'
Tattributo ogni volta che vengono chiamati?In caso affermativo, perché? È probabile che, quando si gestiscono matrici enormi, il costo computazionale di ogni operazione sarebbe molto elevato anche se non è rilevante per la trasposizione. Non è più ragionevole chiamare
transpose()solo quando necessario invece di riscrivere l'Tattributo ogni volta?
Questo è un semplice esempio:
>>> 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]])
Ovviamente xcambia x.Tanche il funzionamento simultaneo . Quando è stato x.Taggiornato? L'hai x.__imul__()fatto?
>>> x *= 100
>>> x
array([[100, 200, 300],
[400, 500, 600]])
>>> x.T
array([[100, 400],
[200, 500],
[300, 600]])
Risposte
La Tproprietà che è la stessa di .transpose()è solo una vista con la forma (e le falcate) cambiate. La memoria del contenuto effettivo è la stessa (puoi usare id(x[0,0])e id(x.T[0,0])per esempio per verificarlo), ma le proprietà dell'oggetto dicono numpycome interpretarlo. Per un array 2D, i passi e la forma sono esattamente l'opposto dell'array originale. Per saperne di più sui passi vedere i documenti . Questo è il motivo per cui le cose sono immediate quando il contenuto cambia: la cella di memoria riceve il nuovo numero, ma l'interpretazione .Tdell'array non cambia.