РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
522 of 541 menu

Метод reset

Метод reset класса nditer сбрасывает внутреннее состояние итератора к начальному положению. Это позволяет повторно использовать уже созданный объект итератора для нового прохода по массиву без необходимости создания нового экземпляра. Метод полезен в ситуациях, когда требуется многократно итерироваться по одним и тем же данным с одинаковыми настройками.

Метод не принимает никаких параметров и не возвращает значения. После вызова reset итератор становится готовым к новому обходу с самого начала массива.

Синтаксис

iterator.reset()

Пример

Давайте создадим одномерный массив и итератор для него, а затем выполним два прохода с помощью метода reset:

import numpy as np arr = np.array([1, 2, 3, 4, 5]) iterator = np.nditer(arr, flags=['c_index']) # First pass print("First pass:") while not iterator.finished: print(f"Index {iterator.index}: {iterator[0]}") iterator.iternext() # Reset iterator iterator.reset() # Second pass print("\nSecond pass:") while not iterator.finished: print(f"Index {iterator.index}: {iterator[0]}") iterator.iternext()

Результат выполнения кода:

"First pass:" "Index 0: 1" "Index 1: 2" "Index 2: 3" "Index 3: 4" "Index 4: 5" "" "Second pass:" "Index 0: 1" "Index 1: 2" "Index 2: 3" "Index 3: 4" "Index 4: 5"

Пример

Рассмотрим использование reset с многомерным массивом и внешним циклом:

import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) iterator = np.nditer(arr, flags=['external_loop'], order='F') # First iteration print("First iteration:") for x in iterator: print(x) # Reset and iterate again iterator.reset() print("\nSecond iteration:") for x in iterator: print(x)

Результат выполнения кода:

"First iteration:" "[1 4]" "[2 5]" "[3 6]" "" "Second iteration:" "[1 4]" "[2 5]" "[3 6]"

Пример

Метод reset особенно полезен при работе с несколькими массивами и изменяемыми операндами. Рассмотрим пример с обновлением данных между проходами:

import numpy as np arr = np.array([10, 20, 30]) iterator = np.nditer([arr, None], flags=['multi_index'], op_flags=[['readonly'], ['writeonly', 'allocate']], op_dtypes=['int64', 'int64']) # First pass: double the values for x, y in iterator: y[...] = x * 2 iterator.operands[1].shape = arr.shape result = iterator.operands[1] print("Doubled array:", result) # Reset and modify data arr[:] = [100, 200, 300] iterator.reset() # Second pass: triple the new values for x, y in iterator: y[...] = x * 3 iterator.operands[1].shape = arr.shape result = iterator.operands[1] print("Tripled array:", result)

Результат выполнения кода:

"Doubled array: [20 40 60]" "Tripled array: [300 600 900]"

Смотрите также

  • метод iternext,
    который переводит итератор на следующий элемент
  • класс nditer,
    предоставляющий объект для эффективной итерации по массивам
  • метод enable_external_loop,
    который включает режим внешнего цикла для итератора
  • метод remove_axis,
    который удаляет ось из итерации
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить