2011-11-08 12 views
7

¿Hay alguna manera de realizar un rollo en una matriz, pero en lugar de tener una copia de los datos solo con una visualización diferente de la misma?Numpy: equivalente a numpy.roll pero solo para visualización de datos

Un ejemplo puede aclarar: b dado una versión laminado de a ...

>>> a = np.random.randint(0, 10, (3, 3)) 
>>> a 
array([[6, 7, 4], 
     [5, 4, 8], 
     [1, 3, 4]]) 
>>> b = np.roll(a, 1, axis=0) 
>>> b 
array([[1, 3, 4], 
     [6, 7, 4], 
     [5, 4, 8]]) 

... si realizo una misión en conjunto b ...

>>> b[2,2] = 99 
>>> b 
array([[ 1, 3, 4], 
     [ 6, 7, 4], 
     [ 5, 4, 99]]) 

.. .el contenido de a no cambiará ...

>>> a 
array([[6, 7, 4], 
     [5, 4, 8], 
     [1, 3, 4]]) 

... al contrario, me gustaría tener:

>>> a 
array([[6, 7, 4], 
     [5, 4, 99], # observe as `8` has been changed here too! 
     [1, 3, 4]]) 

Gracias de antemano por su tiempo y experiencia!

Respuesta

9

Esto no es posible, lo siento. La matriz enrollada no se puede describir con un conjunto diferente de strides, que sería necesario para que una vista NumPy funcione.

Cuestiones relacionadas