numpy
массивы могут быть частично назначены с использованием целочисленных или логических индексов, таких как:
import numpy as np
x = np.arange(5)
x[[2,4]]=0
x
## array([0., 0., 1., 0., 1.])
x[[True]*2+[False]*3]=2
x
## array([2., 2., 1., 0., 1.])
Однако, даже если x[[2,4]]
находится в значении lvalue в этом контексте, значение lvalue не может быть назначено другой переменнойпотому что в этом случае присваивание выполняется с помощью __setitem__
, тогда как __getitem__
при передаче целочисленного или логического списка создает копию:
x = np.arange(5)
y = x[[2,4]]
y[:] = 1
x
array([0., 0., 0., 0., 0.])
Вопрос: есть ли простой / чистый способполучить доступное для записи представление массива на основе подмножества индекса с целым или логическим индексом? Под «простым / чистым» я подразумеваю, что я хочу избежать написания нового класса или отслеживания подиндексов самостоятельно. В основном я ищу какую-то numpy
функцию или трюк, которые мне не удалось найти в Google.
Смысл этого вопроса в том, чтобы сделать это рекурсивно, чтобы иметь возможность создавать функции, которыеприсваивать части массива, просто передавая вокруг представления ракурса, а не передавая индексы и базовый массив.