У меня есть простой одномерный массив NumPy с именем ar1
и другой массив, который показывает индексы диапазона (начальный индекс, конечный индекс) ar1
с именем idx
. Структура выглядит примерно так:
ar1 = np.zeros((m*n))
idx = np.array(
[[1,10],
[40,80],
[100,110]] )
Теперь я хочу изменить элементы в ar1
, используя индексы диапазона, которые у меня есть в idx
. Другими словами, я ищу эффективный способ использования функций и приемов Numpy для управления ar1
от 1 до 10, <66605952996060588>60 до 66 и от 100 до 110 элементов и, например, установить для них число 255.
Как мне это сделать?
Просто сделайте очевидный неэффективный способ. Либо повторяйте выполнение нескольких срезов, либо объединяйте несколько диапазонов в один список индексов. Ломтики различаются по размеру, поэтому нет никакого волшебного способа сделать их все сразу.
Думаю, я соглашусь с hpaulj, что нет более эффективного способа сделать это, чем фактически сгенерировать все индексы.
@hpaulj Объединение разных диапазонов с использованием
np.arange()
на самом деле было первым решением, которое пришло мне в голову, но я подумал, что должен быть более эффективный способ сделать это. Вот почему я задал вопрос.Невозможно сделать несколько срезов «все сразу». Срез — это простой регулярный шаблон, выражаемый тремя значениями — старт/стоп/шаг.