2011-11-08 4 views
7

C'è un modo per eseguire un roll su un array, ma invece di avere una copia dei dati con una visualizzazione diversa di esso?Numpy: equivalente di numpy.roll ma solo per la visualizzazione dei dati

Un esempio potrebbe chiarire: dato b una versione laminati di 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]]) 

... se effettuo un incarico sulla serie b ...

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

.. .il contenuto di a non cambierà ...

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

... al contrario, vorrei avere:

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

Grazie in anticipo per il vostro tempo e le competenze!

risposta

9

Questo non è possibile, mi spiace. L'array arrotolato non può essere descritto da un diverso set di strides, che sarebbe necessario affinché una vista NumPy funzionasse.