- Установка и первое знакомство
- Установка NumPy
- Фундаментальный элемент NumPy – массив (array)
- Минутка восхищения или что такого в массивах NumPy
- Видео по теме
- 2. Установка NumPy
- 2.1. NumPy в составе научных дистрибутивов Python
- 2.1.1. Anaconda
- 2.1.2. ActivePython
- 2.1.3. Enthought Canopy
- 2.1.4. Intel® Distribution for Python
- 2.1.5. Python(x,y)
- 2.1.6. WinPython
- 2.1.7. Pyzo
- 2.1.8. Какой дистрибутив выбрать?
- 2.1.9. Использование в коммерческих целях
- 2.2. Установка с помощью pip
- 2.3. Установка через менеджер пакетов Linux
- Ubuntu и Debian
- Fedora 22 и выше
- 2.4. Установка через менеджер пакетов MAC
- 2.5. Windows
- 2.6. Сборка NumPy из исходных компонентов
Установка и первое знакомство
Язык Python стал популярен благодаря своей богатой библиотеке. Я его воспринимаю как некоего начальника, который через свои команды раздает задачи подчиненным. Они выполняются и на выходе получается некий результат работы программы:
Из всех известных мне языков высокого уровня, этот, наверное, самый высокий, а потому, один из самых удобных в реализации алгоритмов. Но чтобы им успешно пользоваться нужно уметь раздавать приказы подчиненным. И в этой серии занятий мы познакомимся с еще одним исполнителем языка Python – пакетом NumPy.
Вообще, NumPy предназначен для выполнения научных вычислений и активно используется не только в качестве самостоятельной библиотеки учеными и преподавателями по всему миру, но и входит в состав многих других популярных пакетов. С одним из них – Keras, мы с вами недавно познакомились, когда изучали основы работы НС. И вы могли заметить, что вначале программ фигурировала строчка:
Это, как раз, выполнение импорта того самого пакета NumPy.
Но почему он стал так популярен? Причин несколько. Самое главное, критичные по скорости вычисления фрагменты реализованы на языках Си и Фортран. Также он имеет довольно простой и продуманный синтаксис, а, значит, им легко пользоваться. Ну и, наконец, богатство возможностей этой библиотеки, начиная с базовых математических функций и заканчивая работой с полиномами, линейной алгеброй и многомерными матрицами (тензорами). Все это очень часто используется в инженерных задачах, отсюда и высокая популярность пакета.
Установка NumPy
Я думаю, вы прониклись уважением к этому пакету, и пришла пора прикоснуться к «святому граалю». В начале, как всегда, его нужно установить. Сделать это чрезвычайно просто, достаточно выполнить в терминале команду:
pip install numpy
Не удивляйтесь, если этот пакет у вас уже установлен, так как он входит в состав многих других библиотек. Проверить установку можно командой:
Если такая программа выполняется без ошибок, то этот «святой грааль» уже присутствует на вашем устройстве и готов к истязаниям.
У вас здесь уже может возникнуть вопрос: почему импорт записан в таком виде? А не просто: import numpy? Можно и так, но тогда в программе все время придется использовать префикс numpy. Гораздо удобнее писать две буквы «np». Поэтому общепринятой практикой стало импортирование этого пакета именно в таком виде. Я буду следовать сложившейся традиции и делать также.
Фундаментальный элемент NumPy – массив (array)
Отлично, сложнейший этап установки и импорта пакета позади. Пришло время сделать первые шаги и вначале познакомиться с его фундаментальным элементом – однородным многомерным массивом. В NumPy элементы массива имеют единый тип данных. Их индексы описываются кортежем целых неотрицательных чисел. Размерность кортежа – это ранг массива (то есть, размерность массива), а каждое число в кортеже представляет свою отдельную ось:
Как создать массив в NumPy? Существует много способов, но базовый реализуется через функцию:
Здесь в качестве первого параметра object может выступать список или кортеж, а также функция или объект, возвращающий список или кортеж. Второй параметр dtype – это тип элементов массива. Если указано значение None, то тип будет определяться автоматически на основе переданных данных. Подробнее об этой функции можно, как всегда, почитать на странице официальной документации:
Итак, в самом простом варианте можно создать одномерный массив так:
В результате получим объект типа array с элементами 1, 2, 3, 4:
Какой будет тип у этих элементов? Мы можем его посмотреть с помощью атрибута dtype, выполнив в консоли строчку:
То есть, автоматически был применен целочисленный тип размерностью 32 бит. Ну, хорошо, а что если попробовать создать массив с разными типами его элементов, например, так:
В результате увидим, следующее содержимое:
Например, для нашего одномерного случая, мы можем взять первый элемент из массива a, следующим образом:
Увидим значение ‘1’. Обратите внимание, первый элемент имеет индекс 0, а не 1. Единица – это уже второй элемент:
Для изменения значения элемента, достаточно присвоить ему новое значение, например:
в результате получим массив:
А что будет, если мы попробуем присвоить значение другого типа данных, например, число:
Ошибки не будет, а значение автоматически будет преобразовано в строку:
Разработчики пакета NumPy постарались сделать его максимально дружественным, чтобы инженер сосредотачивался именно на решении задачи, а не на нюансах программирования. Поэтому везде, там где это допустимо, пакет NumPy берет на себя разрешение подобных нюансов. И, как показала практика, это очень удобно и заметно облегчает жизнь нам, простым смертным.
Минутка восхищения или что такого в массивах NumPy
Но, все-таки, что такого в массивах NumPy, что они повсеместно используются в разных библиотеках? Давайте я приведу несколько примеров, и вы сами все увидите.
Предположим, мы определили одномерный массив с числами от 1 до 9:
Мы уже знаем как взять один отдельный элемент, но что будет, если прописать индексы для всех 9 элементов:
На выходе увидим одномерный массив из двоек:
array([2, 2, 2, 2, 2, 2, 2, 2, 2])
тогда получим аналогичный массив, но размерностью 5 элементов:
Как видите, индексирование здесь более гибкое, чем у обычных списков Python. Или, вот еще один характерный пример:
Результат будет следующим:
То есть, остаются элементы со значениями True и отбрасываются со значениями False. Обо всем этом мы еще будем подробно говорить.
Еще один пример. Предположим, нам понадобилось представить одномерный массив a в виде матрицы 3х3. Нет ничего проще, меняем его размерность:
и получаем заветный результат:
Далее, можем обращаться к элементам матрицы b так:
В обоих случаях будет взят один и тот же элемент со значением 6.
Все это лишь мимолетный взгляд на возможности пакета NumPy. Я здесь лишь хотел показать, насколько сильно отличаются массивы array от списков языка Python, и если вы хотите овладеть этим инструментом, то эта серия занятий для вас.
Видео по теме
#1. Пакет numpy — установка и первое знакомство | NumPy уроки
#2. Основные типы данных. Создание массивов функцией array() | NumPy уроки
#3. Функции автозаполнения, создания матриц и числовых диапазонов | NumPy уроки
#4. Свойства и представления массивов, создание их копий | NumPy уроки
#5. Изменение формы массивов, добавление и удаление осей | NumPy уроки
#6. Объединение и разделение массивов | NumPy уроки
#7. Индексация, срезы, итерирование массивов | NumPy уроки
#8. Базовые математические операции над массивами | NumPy уроки
#9. Булевы операции и функции, значения inf и nan | NumPy уроки
#10. Базовые математические функции | NumPy уроки
#11. Произведение матриц и векторов, элементы линейной алгебры | NumPy уроки
#12. Множества (unique) и операции над ними | NumPy уроки
#13. Транслирование массивов | NumPy уроки
© 2021 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта
2. Установка NumPy
2.1. NumPy в составе научных дистрибутивов Python
2.1.1. Anaconda
Пожалуй, самый лучший способ установки и использования стека пакетов SciPy, (в том числе и NumPy) является установка дистрибутива Anaconda. Устанавливая данный дистрибутив, вы устанавливаете несколько сотен (порядка 400, в зависимости от используемой вами платформы) самых разных пакетов. Может показаться избыточным, но на деле это оказывается очень удобным — практически все, что может вам понадобится, находится у вас под рукой. Так же вы получаете интерактивную оболочку IPython в привлекательной web-обертке Jupyter. В такой среде очень удобно работать. Например на картинке ниже показано, как выглядит создание матрицы из случайных чисел размером 10х10 и оформлен ее удобный для восприятия вывод с помощью библиотеки SymPy.
Чтобы установить дистрибутив Anaconda, сначала его нужно скачать с официального сайта. Прежде чем нажимать кнопку «download», уточните параметры своей платформы (допустим, у меня это Linux-x86 32 bit). Пока идет скачивание и установка, вы можете изучить доступные в вашем дистрибутиве пакеты и документацию к ним. Думаю, даже после беглого просмотра, вы убедитесь, что вы действительно имеете под рукой очень и очень много самых разнообразных инструментов.
Не смотря на то, что Anaconda сейчас является лидирующим по популярности дистрибутивом Python, не стоит забывать о других дистрибутивах. Все они предоставляют возможность работы со стеком SciPy и NumPy в частности. Помимо прочего, так же как и Anaconda они включают множество научных и вспомогательных библиотек. Однако, все они имеют значительные отличия от Anaconda.
2.1.2. ActivePython
Коммерческий (бесплатный период 30 дней) дистрибутив Python, предназначенный для быстрого внедрения и сопровождения серьезных проектов на базе Python. Содержит предварительно скомпилированные и настроенные решения практически для всех ключевых отраслей, что позволяет значительно сократить время на установку и настройку. Может быть установлен на целый ряд операционных систем. Содержит удобные инструменты для работы в Windows.
ActivePython полностью защищает от всех рисков, связанных с использованием ПО под лицензией GNU/GPL. Все пакеты доступные в собственном репозитории проверяются на безопасность и являются защищенными. Данный дистрибутив всегда включает только последнюю версию OpenSSL. Содержит обширную документацию, но при этом сама организация-разработчик обеспечивает техническую поддержку и всегда дает ответы даже на самые сложные вопросы.
2.1.3. Enthought Canopy
Данный дистрибутив предоставляет, как интерактивную среду, так и собственную среду разработки, причем вы не ограничены какой-то одной версией Python, а можете сами выбирать с какой именно версией Python вы будете работать к примеру 2.7 или 3.5. При этом вы так же имеете доступ к более чем 450 пакетам.
Весьма интересной особенностью Enthought Canopy является работа с научными и аналитическими пакетами. В вашем распоряжении появляется графический менеджер пакетов, который позволяет гибко манипулировать всеми пакетами и их зависимостями. При этом гарантируется что вы имеете доступ к самым стабильным (проверенным) версиям пакетов. Это не означает, что в других дистрибутивах не следят за включаемыми в них пакетами, но Enthought подчеркнуто гарантирует это.
Enthought Canopy включает в себя редактор кода, интегрированное окно IPython в оболочке Jupyter, интерактивный графический отладчик и встроенные инструменты импорта данных. Нельзя не упомянуть о MayaVi — визуализаторе научных данных и BlockCanvasи — визуализаторе для создания имитационных экспериментов. При этом вы имеете мгновенный доступ к пакетной документации, что весьма и весьма удобно.
Enthought Canopy способен работать с Eхcel и LabVIEW, имеет собственный сервер для совместной работы в рамках частных сетей, и имеет много других способов для интеграции в существующую инфраструктуру. Конечно за дополнительные возможности наверняка придется заплатить, но бесплатная версия прекрасно подойдет для научных и инженерных расчетов.
2.1.4. Intel® Distribution for Python
Данный дистрибутив является бесплатным и предоставляет собой высокоскоростную реализацию Python и большого количества научных пакетов. Например, в зависимости от испльзуемого процессора, производительность NumPy, SciPy и numexpr благодаря библиотеке Intel® Math Kernel Library может превосходить производительность тех же библиотек на тех же процессорах от 1,3 до нескольких тысяч раз.
Данный дистрибутив не так прост в установке и настройке, как другие и содержит не так много научных пакетов в своем составе. Но он очень хорошо задокументирован и недостающие пакеты могут быть легко установленны с помощью менеджера пакетов Conda. Помимо прочего, вместе с данным дистрибутивом можно легко использовать другие специализированные библиотеки от Intel®, например Intel® pyDAAL — хорошая альтернатива scikit-learn.
2.1.5. Python(x,y)
Этот дистрибутив больше всего подойдет приверженцам Windows. Абсолютно бесплатен, включает в себя множество научных пакетов и NumPy само-собой разумеется. При этом вы можете создавать научные проекты с Qt-интерфейсом, и работать в Spyder — научно-ориентированной среде разработки. В принципе, это и является ключевой особенностью Python(x,y). Вы действительно можете создавать как маленькие так и большие научные проекты.
Устанавливая Python(x,y), вы получаете очень много инструментов для создания серьезных научных приложений: от компиляторов С/С++/Fortran до средств документирования. Нельзя сказать, что данный дистрибутив является чем-то уникальным, но он определенно заслуживает внимания, особенно, пользователей Windows.
2.1.6. WinPython
Это бесплатный портативный дистрибутив Python — который является просто спасением для пользователей Windows. Слово «портативный» означает, что все необходимое находится в пределах одной папки и может копироваться куда угодно без предварительной установки. При этом на одной машине может запускаться несколько версий Python, причем для разных архитектур. Вы можете хранить весь свой проект на флэшке и работать с ним на любой Windows машине.
Наверное, стоит особо отметить, что данный дистрибутив, все же предназначен для продвинутых научных разработчиков и одновременно продвинутых пользователей Windows. Т. е. это означает, что вы не только создаете, но и сопровождаете научное программное обеспечение и точно знаете что делаете.
2.1.7. Pyzo
Бесплатный кросплатформенный дистрибутив, о котором, весьма лестно отзываются пользователи, особенно OSX. На самом деле, на данный момент, Pyzo представляет собой не дистрибутив, а IDE, которая нацелена на интерактивность и простоту, подходящую не только ученым, но даже школьникам.
Pyzo позволяет выбрать используемый интерпретатор Python и обычно используется с miniconda или anaconda, для упрощения установки научных пакетов. Эту IDE легко установить и легко начать с ней работать. На официальном сайте, достаточно информации для новичков-разработчиков. Поэтому, в отличии от WinPython, Pyzo с увереностью можно порекомендовать тем кто только начинает создавать научное программное обеспечение.
2.1.8. Какой дистрибутив выбрать?
Если вы являетесь новичком в науке или если в вашей работе исследования очень значительно преобладают над разработкой, то я порекомендовал бы дистрибутив Anaconda. Такая рекомендация связана стем, что в образовании и исследованиях IPython, Jupyter и установленных по умолчанию пакетов более чем достаточно. Конечно, рано или поздно, вы столкнетесь с тем, что вам потребуется писать не просто скрипты, но и код, который будет использоваться повторно и очень много раз. Поэтому, здесь обязательно пригодится IDE Spyder и всевозможные инструменты для построения графических инструментов.
Отдельного внимания заслуживает Intel® Distribution for Python, который окажется очень полезен для тех, кто уже перешел в рабочую фазу и ежедневно имеет дело с задачами анлиза данных, машинного обучения или любыми другими, если вы их решаете с помощью стека пакетов SciPy. Даже небольшой прирост в скорости вычислений — это большой плюс. Конечно прирост в 1,3 раза ничего не даст, но если вы готовы приобрести более мощные процессоры, то Intel® Distribution for Python позволит вам использовать весь их потенциал. Причем для этого не требуется знание С и Fortran. Хотя в тоже время знание С и Fortran с инструментами от Intel® может увеличить скорость вычислений на целые порядки.
Ну а все остальное я бы порекомендовал тем кто имеет склонность к разработке научного софта или имеет потребность в ее создании. Причем, новичкам на этом поприще, наверняка стоит начать с Pyzo, думаю, и обучение разработке с данной IDE окажется довольно успешным. Что касается Enthought Canopy, то данный дистрибутив, наверняка больше всего подойдет, как будующим так и состоявшимся инженерам. ActivePython окажется незаменим в коммерческих организациях. А вот Python(x,y) и WinPython больше всего подойдут, как неискушенным так и профессиональным пользователям Windows.
И на последок, данный короткий обзор содержит лишь крайне поверхностный обзор дистрибутивов Python. Я не знаю, какие именно цели вы преследуете и поэтому, прежде чем выбирать, ознакомьтесь с каждым дистрибутивом самостоятельно на его официальном сайте. Если вы преследуете только одну цель — научиться работать с пакетом NumPy (или другими научными пакетами), то повторюсь, лучше всего установить Anaconda. Если изучение NumPy — лишь шаг к более высокой цели, в достижении которой дистрибутив должен послужить основным инструментом, то к выбору дистрибутива нужно подходить более тщательно.
2.1.9. Использование в коммерческих целях
В подавляющем большинстве случаев, пакеты Python относятся к ПО с открытым исходным кодом, но если вы собираетесь использовать какие-то пакеты для извлечения коммерческой выгоды, то обязательно ознакомьтесь с их лицензией. Пользователям ActivePython и платных версий дистрибутивов Anaconda и Enthought Canopy в случае возникновения проблем, связанных с лицензиями на пакеты, предоставляются разнообразные компенсации.
2.2. Установка с помощью pip
Если по некоторым причинам вам необходим только пакет NumPy и больше ничего, то его можно установить с помощью стандартного менеджера пакетов Python — pip. Практически все пакеты разрабатываемые крупными проектами выгружаются в каталог пакетов Python (PyPI) и NumPy — не исключение. менеджер пакетов pip, как раз и нужен для того что бы устанавливать пакеты из этого каталога.
Если в вашей системе установлен Python и pip, то установить NumPy можно с помощью команды:
С помощью этой же команды можно установить любой пакет из стека SciPy:
Или сразу весь стек SciPy:
В данных примерах используется флаг —user для того что бы пакеты не записывались в системные папки и были доступны только локадьному пользователю. Если для вас это не принципиально, просто не используйте этот флаг.
2.3. Установка через менеджер пакетов Linux
Ubuntu и Debian
Пользователи Linux могут установить NumPy и весь стек пакетов SciPy из репозиториев. Однако, может оказаться, что установленный пакет окажется более старой или вовсе не подходящей версией. К тому же установка окажется общесистемной.
Или весь стек целиком
Fedora 22 и выше
2.4. Установка через менеджер пакетов MAC
У MAC нет предустановленного менеджера пакетов и если в вашей системе он отсутствует, то рекомендуется установить Macports. Для установки NumPy и всего стека пакетов SciPy выполните следующую команду:
В данном примере производится установка для Python версии 3.4. Если вы используете другую версию Python, допустим 3.5 то просто замените py34 на py35.
Если вы используете мнеджер Homebrew, то просто выполните:
2.5. Windows
Если по некоторым причинам в Windows вам не подходит установка с помощью pip, то ознакомьтесь с проектом Christoph Gohlke, который предоставляет возможность использовать двоичные файлы (32 и 64 бит) созданных для официального дистрибутива Python на языке CPython. Однако, лучшим вариантом все-таки остается pip.
2.6. Сборка NumPy из исходных компонентов
Создавать Пакеты из исходных текстов кода Python относительно легко, но NumPy требует подключения компилятора Fortran и компиляции кода C. Поэтому, если возникла такая необходимость, то лучше обратиться к официальной документации.