¿Cuándo se actualiza ndarray.T? [duplicar]

Sep 24 2020

En Numpy, puede transponer a ndarraycon el transpose()método, pero también tiene un atributo T.

Cuando ndarrayse modifica a, no solo el valor de retorno del transpose()método, sino también el atributo Tse actualiza automáticamente al mismo tiempo.

ndarray.transpose()es una función, por lo que no es de extrañar. Sin embargo, Tno es una función, sino un mero atributo, por lo que debe actualizarse antes de acceder.

  1. ¿Todas las funciones y métodos de Numpy actualizan el Tatributo cada vez que se llaman?

  2. Si es así, ¿por qué? Es probable que, al manipular matrices enormes, el costo computacional de cada operación sea muy elevado, incluso si no es relevante para la transposición. ¿No es más razonable llamar transpose()solo cuando sea necesario en lugar de reescribir el Tatributo cada vez?

Este es un ejemplo simple:

>>> 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]])

Por supuesto, la operación también xcambia simultáneamente x.T. ¿Cuándo se x.Tactualizó? ¿Lo hiciste x.__imul__()?

>>> x *= 100
>>> x
array([[100, 200, 300],
       [400, 500, 600]])
>>> x.T
array([[100, 400],
       [200, 500],
       [300, 600]])

Respuestas

1 kabanus Sep 23 2020 at 22:24

La Tpropiedad que es la misma que .transpose()es solo una vista con la forma (y los pasos) cambiados. La memoria del contenido real es la misma (puede usar un id(x[0,0])y, id(x.T[0,0])por ejemplo, para verificar esto), pero las propiedades del objeto le indican numpycómo interpretarlo. Para una matriz 2D, los pasos y la forma son el reverso de la matriz original. Para leer más sobre los avances, consulte los documentos . Es por eso que las cosas son inmediatas cuando cambia el contenido: la celda de memoria obtiene el nuevo número, pero la interpretación de la .Tmatriz no cambia.