Вот возможный способ симулировать представление (некоторый синтаксический сахар), избегая явных операторов копирования в конце, используя «причудливый контекст представления». Вам нужно позаботиться о том, чтобы ваш код не изменял индексный массив в контексте
import contextlib
@contextlib.contextmanager
def fancy_index_view(arr, inds):
# create copy from fancy inds
arr_copy = arr[inds]
# yield 'view' (copy)
yield arr_copy
# after context, save modified data
arr[inds] = arr_copy
сейчас, фрагмент
import numpy as np
foo = np.random.random((22,2))
row_inds = [0,5,21]
barview = foo[row_inds]
barview[::] = 1
foo[row_inds] = barview
можно заменить на
import numpy as np
foo = np.random.random((22,2))
row_inds = [0,5,21]
with fancy_index_view(foo, row_inds) as barview:
barview[::] = 1