Основы NumPy: массивы и векторные вычисления

С.В. Лемешевский (sergey.lemeshevsky at gmail.com)

Институт математики НАН Беларуси

Mar 18, 2020


Содержание

Объект многомерных массивов ndarray
      Создание массива
      Арифметические операции с массивами NumPy
      Основы индексирования и срезы
      Логическое (Boolean) индексирование
      Необычное индексирование
      Транспонирование массивов и замена осей
Универсальные функции: быстрые поэлементные функции от массивов
Программирование с использованием массивов
      Выражение условной логики в операциях с массивами
      Математические и статистические методы
      Методы для булевых массивов
      Сортировка
      Основные операции над множествами для массивов
Чтение и запись в/из файлы массивов
Линейная алгебра
Генерация псевдослучайных числел
Пример: Случайное блуждание
Упражнения
      Матрица из нулей и единиц
      Моделирование нескольких случайных блужданий за раз

Рассматривается библиотека NumPy. NumPy (сокращение от Numerical Python) предоставляет эффективный интерфейс для хранения и работы с данными. В какой-то степени массивы NumPy аналогичны спискам Python, но массивы NumPy обеспечивают гораздо более эффективное хранение и операции с данными при увеличении массивов в размере. Если NumPy установлен его можно импортировать следующей командой:

import numpy

Большинство людей в мире научного Python импортируют NumPy, используя np в качестве псевдонима:

import numpy as np

О встроенной документации

Как было рассказано выше IPython дает возможность быстро просмотреть содержание пакета, а также документацию по функциям.

Например, для того чтобы отобразить содержание пространства имен numpy, можно выполнить следующее:

In [1]: np.<TAB>

Для отображения встроенной документации NumPy можно набрать следующее:

In [2]: np?

Более детальную документацию вместе с учебниками и другими ресурсами можно найти по адресу: https://numpy.org/

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

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

In [1]: import numpy as np

In [2]: my_arr = np.arange(1000000)

In [3]: my_list = list(range(1000000))

In [4]: %%time for _ in range(10): my_arr2 = my_arr*2
CPU times: user 18 ms, sys: 26.4 ms, total: 44.4 ms
Wall time: 86.1 ms

In [5]: %%time for _ in range(10): my_list2 = [x * 2 for x in my_list]
CPU times: user 544 ms, sys: 105 ms, total: 650 ms
Wall time: 655 ms