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

Метод enable_external_loop класса nditer

Метод enable_external_loop класса nditer включает режим внешнего цикла при итерации по массивам. В этом режиме итератор возвращает целые фрагменты данных вместо отдельных элементов, что позволяет выполнять операции над блоками данных за один раз и повышает производительность.

Метод принимает один необязательный параметр keep_axis, который определяет, следует ли сохранять оси при внешнем цикле. По умолчанию параметр равен False, что означает, что внешний цикл будет выполняться по всем осям.

Синтаксис

nditer.enable_external_loop([keep_axis])

Пример

Создадим итератор для двумерного массива и включим внешний цикл:

import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) it = np.nditer(arr, flags=['external_loop']) for x in it: print(x)

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

[1 2 3 4 5 6]

Пример

Используем внешний цикл с сохранением осей для многомерного массива:

import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) it = np.nditer(arr, flags=['external_loop'], op_flags=['readwrite']) it.enable_external_loop(keep_axis=True) for x in it: print(x)

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

[[1 2 3] [4 5 6]]

Пример

Применим внешний цикл для выполнения операций над блоками данных:

import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) it = np.nditer(arr, flags=['external_loop'], op_flags=['readwrite']) it.enable_external_loop() for x in it: x *= 2 print(arr)

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

[[ 2 4 6] [ 8 10 12]]

Пример

Сравним скорость работы с внешним и без внешнего цикла:

import numpy as np import time arr = np.arange(1000000).reshape(1000, 1000) # Without external loop start = time.time() it = np.nditer(arr, op_flags=['readwrite']) for x in it: x += 1 time1 = time.time() - start # With external loop start = time.time() it = np.nditer(arr, flags=['external_loop'], op_flags=['readwrite']) it.enable_external_loop() for x in it: x += 1 time2 = time.time() - start print(time1 > time2)

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

True

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

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