что быстрее while или for python

Когда использовать «while» или » for » в Python

Я нахожу проблемы, когда я должен использовать while петли или for цикл в Python. Похоже, люди предпочитают использовать for loop (меньше строк кода?). Есть ли какая-то конкретная ситуация, в которой я должен использовать тот или иной? Это вопрос личных предпочтений? Коды, которые я прочитал до сих пор, заставили меня думать, что между ними есть большие различия.

6 ответов

Да, существует огромная разница между while и for.

на на оператор выполняет итерацию через коллекцию или итерацию объекта или функции генератора.

на пока оператор просто зацикливается, пока условие не будет ложным.

это не предпочтение. Вопрос в том, каковы ваши структуры данных.

часто мы представляем значения, которые мы хотим обработать, как range (реальный список), или xrange (который генерирует значение.) Это дает нам структуру данных, адаптированную для на заявление.

обычно, однако, у нас есть готовая коллекция: набор, кортеж, список, карта или даже строка уже является итерабельной коллекцией, поэтому мы просто используем на петли.

в некоторых случаях нам может потребоваться некоторая обработка функционального программирования для нас, и в этом случае мы можем применить это преобразование как часть итерации. The sorted и enumerate функции применяются преобразование на iterable, которое естественно соответствует на заявление.

если у вас нет аккуратной структуры данных для итерации, или у вас нет функции генератора, которая управляет вашей обработкой, вы должны использовать пока.

while полезно в сценариях, где условие разрыва логически не зависит от какой-либо последовательности. Например, рассмотрим непредсказуемые взаимодействия:

конечно, вы мог бы напишите соответствующий итератор, чтобы инкапсулировать это действие и сделать его доступным через for – но как это послужит читаемости?1

во всех других случаях в Python используйте for (или соответствующая функция более высокого порядка, которая инкапсулирует петля.)

1 Если user_is_sleeping возвращает функция False когда false, пример кода может быть переписан как следующий for петли:

— это гораздо проще и легче читать, чем этот:

прежде всего, существуют различия между циклом for в python и на других языках. В то время как в python он перебирает список значений (например, для значения в [4,3,2,7]), в большинстве других языков (C/C++, Java, PHP и т. д.) Он действует как цикл while, но легче читать.

для циклов обычно используются, когда известно количество итераций (например, длина массива), и в то время как циклы используются, когда вы не знаете, сколько времени это займет (например,пузырь вроде алгоритм, который петляет, пока значения не отсортированы)

считайте обработки итерируемые объекты. Вы можете сделать это с помощью for петли:

или, вы можете сделать это с помощью while петли:

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

для циклов обычно делают более ясным, что делает итерация. Вы не всегда можете использовать их напрямую, но в большинстве случаев логика итерации с циклом while может быть обернута внутри функции генератора. Например:

Источник

Приёмы для ускорения кода на Python

Для ускорения кода на Python программисты могут использовать много приемов. Мы собрали несколько самых простых и при этом самых эффективных из них.

что быстрее while или for python. leo rivas cpkojocxduy unsplash.n5b8w. что быстрее while или for python фото. что быстрее while или for python-leo rivas cpkojocxduy unsplash.n5b8w. картинка что быстрее while или for python. картинка leo rivas cpkojocxduy unsplash.n5b8w.

Python – один из самых популярных языков программирования в мире. Этим он обязан своему простому синтаксису и богатой экосистеме. В последнее время он используется в соревновательном программировании, где большое значение имеет скорость выполнения программ.

Представляем вам несколько приемов и подходов для ускорения кода и повышения его эффективности.

Используйте подходящие структуры данных

Применение правильных структур данных значительно ускоряет выполнение кода.

В Python встроены такие структуры данных, как список ( list ), кортеж ( tuple ), множество ( set ) и словарь ( dictionary ). Несмотря на это, большинство людей хорошо помнят только про списки. Это неправильный подход.

Для ускорения кода используйте те структуры данных, которые максимально соответствуют вашей задаче. Особенно это касается выбора между списком и кортежем, ведь итерирование по последнему занимает куда меньше времени.

Избегайте циклов for

Применяйте списковые включения (list comprehension)

Не обращайтесь ни к какой другой технике, если можно использовать списковые включения. Например, этот код заносит в список все числа между 1 и 1000, кратные 3:

Со списковыми включениями код трансформируется в одну строку:

Не пренебрегайте множественным присваиванием

Не стоит инициализировать несколько переменных так:

Лучше придерживайтесь следующего синтаксиса:

Марк Лутц «Изучаем Python»

Скачивайте книгу у нас в телеграм

Не создавайте глобальные переменные

Да, в Python есть ключевое слово global для объявления таких переменных. Но операции с ними требуют больше времени, чем с локальными. Потому не создавайте глобальные переменные без крайней необходимости.

Применяйте библиотечные функции

Не пишите функцию вручную, если она уже реализована в какой-нибудь библиотеке. Библиотечные функции крайне эффективны, и, скорее всего, вам не удастся достичь лучшего результата самостоятельно.

Соединяйте строки методом join

Всё дело в том, что оператор + каждый раз создаёт новую строку, а затем копирует в неё исходные. join() устроен иначе и обеспечивает выигрыш во времени.

Используйте генераторы

Будьте бдительны

Взгляните на следующий код:

Избегайте точек

Старайтесь не пользоваться ими. Взгляните на пример:

Вместо этого можно применить следующий синтаксис:

Используйте 1 в бесконечных циклах

Попробуйте другие подходы

Не бойтесь применять новые практики для повышения эффективности кода.

Допустим, у вас есть код:

Вместо этого стоит попробовать:

Используйте ускорители

Медлительность Python послужила вдохновением для различных проектов, сокращающих его время работы. На большинстве соревнований по программированию вы встретитесь с pypy (там, где можно писать на Python).

Эти средства помогут уменьшить время выполнения Python-программ.

Для больших датасетов используйте специальные библиотеки

C/C++ быстрее Python. Поэтому многие пакеты и модули, которые можно использовать в программах на Python, пишутся на C/C++. Среди таких модулей – Numpy, Scipy и Pandas, столь необходимые при обработке больших массивов данных.

Используйте последнюю версию Python

Python регулярно обновляется и совершенствуется и с каждым релизом становится всё быстрее и оптимизированнее. Поэтому для ускорения кода всегда пишите его на новейшей версии языка.

Заключение

Мы рассмотрели приёмы для ускорения кода на Python. Конечно, этот список не исчерпывающий: есть и другие способы, которые могут вам пригодиться. Обязательно ищите их и пишите код эффективно!

Источник

Что быстрее цикл for или while python

Циклы for и while, операторы break и continue, волшебное слово else

В этой статье я расскажу о циклах for и while, операторах break и continue, а также о слове else, которое, будучи употребленное с циклом, может сделать программный код несколько более понятным.

Цикл while

While — один из самых универсальных циклов в Python, поэтому довольно медленный. Выполняет тело цикла до тех пор, пока условие цикла истинно.

Цикл for

Цикл for уже чуточку сложнее, чуть менее универсальный, но выполняется гораздо быстрее цикла while. Этот цикл проходится по любому итерируемому объекту (например строке или списку), и во время каждого прохода выполняет тело цикла.

Оператор continue

Оператор continue начинает следующий проход цикла, минуя оставшееся тело цикла (for или while)

Оператор break

Оператор break досрочно прерывает цикл.

Волшебное слово else

Слово else, примененное в цикле for или while, проверяет, был ли произведен выход из цикла инструкцией break, или же «естественным» образом. Блок инструкций внутри else выполнится только в том случае, если выход из цикла произошел без помощи break.

Циклы в Питоне

Чтобы производить повторяющиеся расчёты, на языках программирования были созданы специальные конструкции которые называются циклами. именно они помогают компьютеру высчитывать какие-то величины очень большое число раз.

что быстрее while или for python. im 368. что быстрее while или for python фото. что быстрее while или for python-im 368. картинка что быстрее while или for python. картинка im 368.

В отличие от других языков программирования в Питоне оставили всего два основных цикла: цикл с параметром и цикл с предусловием. Рассмотрим в этом уроке по изучению Питона и тот и другой операторы, а также вы узнаете про дополнительные конструкции, которые облегчат жизнь простого программиста работающего на Питоне.

Цикл с предусловием while

Цикл While можно назвать самым универсальным циклом в Python, но он выполняется медленнее, чем следующий циклы. Операторы, входящие в тело цикла будут выполняться до тех пор, пока условие цикла будет истинно. В этом и плюс, но и жирный минус. Если вы создадите неправильное условие, то циклы будет выполняться бесконечно долго.

Эта конструкция напечатает ряд строк, где i будет в диапазоне от 1 до 100

Цикл с параметром for

Гораздо быстрее выполняется цикл for это связано с тем, что в нём нет логических проверок. Он подходит для любого итерируемого объекта (те, которые можно вычислить конечное число раз). Подходят не только числа, но и строки и списки, что делает его более универсальным. Однако при этом, его синтаксис будет казаться поначалу более запутанным, чем, к примеру, for на Паскале. Во время каждого прохода выполняются все операторы (нужно сделать отступ), находящиеся в теле цикла.

Пример цикла for с диапазоном чисел

то есть пока i идёт от 1 до n-значения переменная s будет накапливать сумму чисел, делящихся на 3.

Пример цикла for со строкой

В этом цикле в переменной s вычисляется длина строки, которая была передана в строковую переменную a.

Дополнительные операторы, используемые в циклах на Питоне

Однако на практике бывает очень много ситуаций в которых нужно игнорировать часть блока операторов или наоборот, принудительно выйти из цикла, если все необходимые данные уже в нём подсчитаны. Их одинаково хорошо можно использовать в циклах for и while. Посмотрим как они работают.

Оператор следующего прохода continue

С помощью этого оператора начинается следующий проход цикла, минуя оставшиеся после него операторы в теле цикла.

Этот пример делает цикл по строке и по условию проверяет каждый символ на соответствие с числом 3. Если находит его, то увеличивает счётчик a, а в самом конце выводит общее число троек в строке.

что быстрее while или for python. im 369. что быстрее while или for python фото. что быстрее while или for python-im 369. картинка что быстрее while или for python. картинка im 369.

Оператор прерывания цикла break

С помощью этого оператора циклы досрочно прерывается. Удобно использовать, когда все что нужно уже подсчитано.

Результат выполнения программы

что быстрее while или for python. im 370. что быстрее while или for python фото. что быстрее while или for python-im 370. картинка что быстрее while или for python. картинка im 370.

Инструкция проверки прерывания else

Для завершения цикла более естественным образом, применяется, как вы знаете в условном операторе if. В цикле эта команда будет определять было ли произведено прерывание инструкцией break. Если это имеет место, то выполняется блок операторов, стоящих за этой инструкцией.

Видоизменим наш пример, с включением обработки исключительного случая.

Здесь главное не промахнуться с расстановкой отступов, у else их нет, так как она выше проверки условия if. если сделаете правильно — код заработает правильно.

Циклы

Выполнение программ, написанных на любом языке программирования, по умолчанию является последовательным. Иногда нам может понадобиться изменить выполнение программы. Выполнение определенного кода может потребоваться повторить несколько раз.

Для этого в языках программирования предусмотрены различные типы циклов, которые способны повторять определенный код несколько раз. Чтобы понять принцип работы оператора цикла, рассмотрим следующую схему.

что быстрее while или for python. Lb6CHbYCvQD0. что быстрее while или for python фото. что быстрее while или for python-Lb6CHbYCvQD0. картинка что быстрее while или for python. картинка Lb6CHbYCvQD0.

Для чего нужны циклы в python?

Циклы упрощают сложные задачи до простых. Он позволяет нам изменить поток программы таким образом, что вместо того, чтобы писать один и тот же код снова и снова, мы можем повторять его конечное число раз. Например, если нам нужно вывести первые 10 натуральных чисел, то вместо того, чтобы использовать оператор print 10 раз, мы можем вывести их внутри цикла, который выполняется до 10 итераций.

Преимущества циклов

В Python преимущества циклов, как и в других язвках программирования, заключаются в следующем:

В Python существуют следующие операторы циклов.

Оператор циклаОписание
forЦикл for используется в том случае, когда необходимо выполнить некоторую часть кода до тех пор, пока не будет выполнено заданное условие. Цикл for также называют циклом c предусловием. Лучше использовать цикл for, если количество итераций известно заранее.
whileЦикл while используется в сценарии, когда мы не знаем заранее количество итераций. Блок операторов в цикле while выполняется до тех пор, пока не будет выполнено условие, указанное в цикле while. Его также называют циклом с предварительной проверкой условия.
do-whileЦикл do-while продолжается до тех пор, пока не будет выполнено заданное условие. Его также называют циклом с пстусловием. Он используется, когда необходимо выполнить цикл хотя бы один раз.

Цикл for в Python

Цикл for в Python используется для многократного повторения операторов или части программы. Он часто используется для обхода структур данных, таких как список, кортеж или словарь.

Синтаксис цикла for в python приведен ниже.

что быстрее while или for python. OzAI11jHkja1. что быстрее while или for python фото. что быстрее while или for python-OzAI11jHkja1. картинка что быстрее while или for python. картинка OzAI11jHkja1.

Цикл For с использованием последовательности

Пример 1: Итерация строки с помощью цикла for

Пример 2: Программа для печати таблицы заданного числа.

Пример 3: Программа для печати суммы заданного списка.

Цикл For с использованием функции range()

Функция range()

Рассмотрим следующие примеры:

Пример 1: Программа для печати чисел по порядку.

Пример 2: Программа для печати таблицы заданного числа.

Пример 3: Программа для печати четного числа с использованием размера шага в range().

Вложенный цикл for в python

Python позволяет нам вложить любое количество циклов for внутрь цикла for. Внутренний цикл выполняется n раз за каждую итерацию внешнего цикла. Синтаксис приведен ниже.

Пример 1: Вложенный цикл for

Пример 2: Программа для печати пирамиды чисел.

Использование оператора else в цикле for

Цикл for полностью исчерпал себя, так как нет прерывания.

Цикл был прерван, благодаря оператору break.

Цикл while в Python

Цикл while позволяет выполнять часть кода до тех пор, пока заданное условие не станет ложным. Он также известен как цикл с предварительной проверкой условия.

Синтаксис приведен ниже.

что быстрее while или for python. mmZk9nNrFtKL. что быстрее while или for python фото. что быстрее while или for python-mmZk9nNrFtKL. картинка что быстрее while или for python. картинка mmZk9nNrFtKL.

Операторы управления циклом

Мы можем изменить обычную последовательность выполнения цикла while с помощью оператора управления циклом. Когда выполнение цикла while завершается, все автоматические объекты, определенные в этой области видимости, уничтожаются. Python предлагает следующие управляющие операторы для использования в цикле while.

3. Оператор pass — Оператор pass используется для объявления пустого цикла. Он также используется для определения пустого класса, функции и оператора управления. Давайте разберем следующий пример.

Пример 1: Программа для печати от 1 до 10 с использованием цикла while

Пример 2: Программа для печати таблицы заданных чисел.

Бесконечный цикл while

Если условие, заданное в цикле while, никогда не станет ложным, то цикл while никогда не завершится, и он превратится в бесконечный цикл while.

Любое ненулевое значение в цикле while указывает на всегда истинное состояние, в то время как ноль указывает на всегда ложное состояние. Такой подход полезен, если мы хотим, чтобы наша программа непрерывно выполнялась в цикле без каких-либо помех.

Использование else в цикле while

Программа для печати чисел Фибоначчи до заданного предела

Оператор прерывания в Python

Break — это ключевое слово в python, которое используется для вывода управления программой из цикла. Оператор break разрывает циклы по одному, то есть в случае вложенных циклов он сначала разрывает внутренний цикл, а затем переходит к внешним циклам. Другими словами, можно сказать, что break используется для прерывания текущего выполнения программы, и управление переходит на следующую строку после цикла.

Прерывание обычно используется в тех случаях, когда нам нужно прервать цикл при заданном условии.

Синтаксис прерывания приведен ниже.

Пример: оператор break с циклом while

Оператор continue в Python

Оператор continue в Python используется для возврата управления программой в начало цикла. Оператор continue пропускает оставшиеся строки кода внутри цикла и начинает следующую итерацию. В основном он используется для определенного условия внутри цикла, чтобы мы могли пропустить определенный код для конкретного условия.

что быстрее while или for python. LEZSnyPHI2cj. что быстрее while или for python фото. что быстрее while или for python-LEZSnyPHI2cj. картинка что быстрее while или for python. картинка LEZSnyPHI2cj.

Рассмотрим следующие примеры.

Давайте посмотрим на другой пример:

Оператор pass в python

Оператор pass является нулевым оператором (null operation), поскольку при его выполнении ничего не происходит. Он используется в тех случаях, когда оператор синтаксически необходим, но мы не хотим использовать вместо него какой-либо исполняемый оператор.

Например, он может быть использован при переопределении метода родительского класса в подклассе, но мы не хотим давать его конкретную реализацию в подклассе.

Pass также используется в тех случаях, когда код будет записан где-то, но еще не записан в программном файле. Рассмотрим следующий пример.

Python цикл Do While

В Python нет цикла do while. Но мы можем создать подобную программу.

Цикл do while используется для проверки условия после выполнения оператора. Он похож на цикл while, но выполняется хотя бы один раз.

Источник

Циклы в Питоне

Содержание:

Чтобы производить повторяющиеся расчёты, на языках программирования были созданы специальные конструкции которые называются циклами. именно они помогают компьютеру высчитывать какие-то величины очень большое число раз.

что быстрее while или for python. im 368. что быстрее while или for python фото. что быстрее while или for python-im 368. картинка что быстрее while или for python. картинка im 368.

В отличие от других языков программирования в Питоне оставили всего два основных цикла: цикл с параметром и цикл с предусловием. Рассмотрим в этом уроке по изучению Питона и тот и другой операторы, а также вы узнаете про дополнительные конструкции, которые облегчат жизнь простого программиста работающего на Питоне.

Цикл с предусловием while

Цикл While можно назвать самым универсальным циклом в Python, но он выполняется медленнее, чем следующий циклы. Операторы, входящие в тело цикла будут выполняться до тех пор, пока условие цикла будет истинно. В этом и плюс, но и жирный минус. Если вы создадите неправильное условие, то циклы будет выполняться бесконечно долго.

Эта конструкция напечатает ряд строк, где i будет в диапазоне от 1 до 100

Цикл с параметром for

Гораздо быстрее выполняется цикл for это связано с тем, что в нём нет логических проверок. Он подходит для любого итерируемого объекта (те, которые можно вычислить конечное число раз). Подходят не только числа, но и строки и списки, что делает его более универсальным. Однако при этом, его синтаксис будет казаться поначалу более запутанным, чем, к примеру, for на Паскале. Во время каждого прохода выполняются все операторы (нужно сделать отступ), находящиеся в теле цикла.

Пример цикла for с диапазоном чисел

то есть пока i идёт от 1 до n-значения переменная s будет накапливать сумму чисел, делящихся на 3.

Пример цикла for со строкой

В этом цикле в переменной s вычисляется длина строки, которая была передана в строковую переменную a.

Дополнительные операторы, используемые в циклах на Питоне

Однако на практике бывает очень много ситуаций в которых нужно игнорировать часть блока операторов или наоборот, принудительно выйти из цикла, если все необходимые данные уже в нём подсчитаны. Их одинаково хорошо можно использовать в циклах for и while. Посмотрим как они работают.

Оператор следующего прохода continue

С помощью этого оператора начинается следующий проход цикла, минуя оставшиеся после него операторы в теле цикла.

Этот пример делает цикл по строке и по условию проверяет каждый символ на соответствие с числом 3. Если находит его, то увеличивает счётчик a, а в самом конце выводит общее число троек в строке.

что быстрее while или for python. im 369. что быстрее while или for python фото. что быстрее while или for python-im 369. картинка что быстрее while или for python. картинка im 369.

Оператор прерывания цикла break

С помощью этого оператора циклы досрочно прерывается. Удобно использовать, когда все что нужно уже подсчитано.

Результат выполнения программы

что быстрее while или for python. im 370. что быстрее while или for python фото. что быстрее while или for python-im 370. картинка что быстрее while или for python. картинка im 370.

Инструкция проверки прерывания else

Для завершения цикла более естественным образом, применяется, как вы знаете в условном операторе if. В цикле эта команда будет определять было ли произведено прерывание инструкцией break. Если это имеет место, то выполняется блок операторов, стоящих за этой инструкцией.

Видоизменим наш пример, с включением обработки исключительного случая.

Вот так может быть выполнен этот код, если семёрка встречается

что быстрее while или for python. im 371. что быстрее while или for python фото. что быстрее while или for python-im 371. картинка что быстрее while или for python. картинка im 371.

а вот так, если её нет в строке

что быстрее while или for python. im 372. что быстрее while или for python фото. что быстрее while или for python-im 372. картинка что быстрее while или for python. картинка im 372.

На этом я попрощаюсь с вами. Разбирайте примеры по этой теме.

Источник

Циклы в Python: их сравнение и производительность

Содержание

На сегодняшний день Python является одним из самых популярных языков программирования. Это интерпретируемый высокоуровневый язык с элегантным и легко читаемым синтаксисом. Но Python, как правило, значительно медленнее, чем Java, C#, особенно C и C++, а также Fortran. И иногда вопросы производительности могут сильно влиять на возможность полноценно использовать приложения.

К счастью, есть решения для улучшения производительности программ на Python. И у разработчиков есть возможности увеличить скорость выполнения кода. Например, широко распространена практика использовать оптимизированные процедуры, обычно написанные на C или Cython. Они могут быть частью как самого языка Python, так и сторонних библиотек. Кроме того, работу можно ускорить, если пользоваться не глобальными, а локальными переменными. Поэтому копирование глобальной переменной в локальную перед циклом считается хорошим стилем.

И наконец, всегда есть возможность написать функции Python на C, C++ или Cython и вызывать их потом из Python-приложения, ликвидировав таким образом узкие места в программе. Но это уже крайняя мера, и на практике так делать приходится редко.

Очень часто вопросы производительности возникают при использовании циклов с большим количеством итераций. И существует большое количество полезных приемов, позволяющих ускорить код. Но это уже выходит за рамки настоящего обзора.

В нашей статье мы будет сравнивать производительность различных способов поэлементного суммирования двух последовательностей. А именно:

Но производительность это не главное при разработке программного обеспечения. Более того, как сказал Дональд Кнут в своей книге «Искусство программирования»: «Поспешная оптимизация — это корень всех (или почти всех) зол в программировании.» В конечном итоге, «важна читаемость (readability counts)». Это сказано в «Дзен Python» Тима Питерса.

Постановка задачи

Мы будем производить поэлементное суммирование двух последовательностей. Иными словами, мы возьмем две последовательности одинаковой длины (представленные либо списками, либо массивами) и создадим третью последовательность, элементы которой будут представлять из себя суммы соответствующих элементов первых двух последовательностей.

Подготовка

Также мы будем использовать библиотеку NumPy, поэтому импортируем и ее.

Теперь мы готовы двигаться дальше!

Простые циклы

Давайте для начала рассмотрим в действии обычные циклы Python.

Используем чистый Python

В результате получим:

160 µs ± 1.44 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

Заметим также, что результат выполнения команды timeit зависит от многих факторов и может при каждом запуске быть разным.

Цикл for должен быть лучше оптимизированным для подобных операций, так как был создан, чтобы перебирать коллекции, итераторы и генераторы. Давайте посмотрим, так ли это.

122 µs ± 188 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

Представления списков в языке Python очень похожи на обычные циклы for и весьма удобны в простых ситуациях. Они имеют более компактный код и обычно чуть-чуть быстрее обычных циклов.

В результате получим:

87.2 µs ± 490 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

Использование библиотеки NumPy

NumPy — это сторонняя библиотека, которая очень часто используется в численных вычислениях. Она особенно удобна для операций с массивами (для этого в ней есть множество полезных функций). Также она позволяет писать простой и элегантный код без использования циклов.

На самом деле циклы, равно как и другие критичные для производительности операции, реализованы в NumPy на системном уровне. Именно это и позволяет функциям NumPy быть быстрее обычных функций языка Python. Еще одним преимуществом является то, как Numpy обрабатывает переменные и типы.

Давайте для начала создадим из списков целого типа Python x и y массивы NumPy типа integer 64-bit (целочисленный 64-х битный тип числа).

Результат будет следующий:

1.03 µs ± 5.09 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

Это почти в 85 раз быстрее, чем при использовании представления списков! И код крайне прост и красив. При работе с большими данными массивы NumPy — это самый лучший выбор. Причем, чем больше данных, тем больше выигрыш во времени.

И это не все. Если нам подходит 32-х битный целочисленный тип данных вместо 64-х битного, мы можем еще сэкономить не только память, но и время.

x_, y_ = np.array(x, dtype=np.int32), np.array(y, dtype=np.int32)

Точно так же теперь складываем два массива:

И результат будет следующий:

814 ns ± 5.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

Результаты с большими n ( 10 000 и 100 000 ) приведены в таблице в конце статьи. Они иллюстрируют ту же зависимость, причем выигрыш в производительности NumPy при росте n тоже увеличивается.

Вложенные циклы

Теперь сравним работу вложенных циклов.

Используем чистый Python

В результате получим:

19.7 ms ± 271 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

Результат будет следующий:

16.4 ms ± 303 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

В некоторых случаях вложенные циклы могут использоваться и в представлении списков, давая при этом дополнительный выигрыш в скорости.

12.1 ms ± 99.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

В этом примере у нас было 100000 ( 100 * 1000 ) элементов в списке. Его обработка лишь чуть-чуть медленней, чем обработка одиночным циклом одного обычного списка со 100000 элементов. Этот вывод верен для всех трех рассмотренных нами подходов (представление списков, циклы for и циклы while ).

Использование библиотеки NumPy

NumPy великолепно подходит для работы с многомерными массивами. Давайте опять используем списки x и y для создания из них массивов NumPy типа integer 64-bit (целочисленный 64-х битный тип числа).

И снова измерим производительность операции сложения:

Результат будет следующим:

69.9 µs ± 909 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

Это примерно в 173 раза быстрее, чем представление списков (самый быстрый способ использования циклов Python). Но результат может быть еще лучше, если мы будем использовать 32-х битные целые числа.

Снова замеряем, как и прежде, скорость работы:

И в результате получаем:

34.3 µs ± 44.6 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

Это еще в два раза быстрее, чем при использовании 64-х битных целых чисел.

Результаты

Количество элементов, m × n1×1.0001×10.0001×100.000100×1.000
Цикл while160 μs1.66 ms17.0 ms19.7 ms
Цикл for122 μs1.24 ms13.4 ms16.4 ms
Представление списков87.2 μs894 μs8.92 ms12.1 ms
numpy с 64-х битными целыми числами1.03 μs6.36 μs71.9 μs69.9 μs
numpy с 32-х битными целыми числами814 ns2.87 μs34.1 μs34.3 μs

Выводы

Библиотека NumPy дает нам функции и операторы, которые существенно повышают скорость работы и сильно уменьшают количество кода в программе. Это особенно полезно при работе с одномерными и многомерными массивами.

Пожалуйста, имейте ввиду, что все результаты и закономерности, полученные в данной статье, не могут быть распространены на все случаи жизни. Эти примеры даны просто для иллюстрации. Правильный путь для улучшения эффективности программы — находить в ней узкие места и проводить свои собственные тесты.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *