Numpy: эквивалент numpy.roll, но только для визуализации данных

#python #numpy #python-2.7

#python #numpy #python-2.7

Вопрос:

Есть ли способ выполнить прокрутку массива, но вместо того, чтобы иметь копию данных, имеющих просто другую их визуализацию?

Пример может прояснить: дана b свернутая версия 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]])
  

…если я выполняю присваивание для массива b

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

…содержимое a не изменится…

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

… напротив, я хотел бы иметь:

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

Заранее спасибо за ваше время и опыт!

Ответ №1:

Извините, это невозможно. Свернутый массив не может быть описан другим набором шагов, которые были бы необходимы для работы NumPy view.