Нашли ошибку?
Скачать чистый
урок 2 из 5≈ 15 минупражнения: 0 из 4

Первый массив

Что такое массив NumPy, чем он отличается от списка и как одной строкой посчитать что-то для всех элементов сразу.

Python запустится при первом выполнении

Представьте прайс-лист маленькой кофейни: четыре позиции по 120, 80, 45 и 300 рублей. Вы решили сделать скидку 10 % на всё. В обычном Python цены — это список, и новую цену приходится считать для каждого элемента отдельно: циклом или генератором списка. (Если последняя строка ячейки — просто выражение, без print, Jupyter и этот урок показывают его значение под ячейкой.)

[ ]Скидка на список цен
prices_list = [120, 80, 45, 300]
[p * 0.9 for p in prices_list]
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
[108.0, 72.0, 40.5, 270.0]

Работает, но с числами так приходится делать постоянно: каждая формула превращается в цикл. NumPy (Numerical Python) — библиотека, которая хранит числа в массивах (array) и умеет считать по всем элементам сразу. На ней построены pandas, scikit-learn, SciPy и почти весь анализ данных на Python.

Первый массив

NumPy подключают под коротким именем np — так пишут почти во всех программах и в документации:

[ ]Массив из списка
import numpy as np

prices = np.array([120, 80, 45, 300])
prices
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
array([120,  80,  45, 300])

np.array берёт список и делает из него массив. Последняя строка ячейки — просто prices, и Jupyter (как и этот урок) показывает её значение: array([...]). По такой записи сразу видно, что перед нами массив, а не список. print показывает тот же массив иначе:

[ ]print показывает массив без запятых
print(prices)
print(type(prices))
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
[120  80  45 300]
<class 'numpy.ndarray'>

Элементы через пробелы, без запятых — это не ошибка, так массив выглядит при печати. Тип массива называется ndarray (n-dimensional array, «n-мерный массив»): массивы бывают и двумерными, как таблица, — до них дойдём во втором модуле.

[ ]Упражнение 1Температуры за неделю решено

Утренние температуры за неделю: 18, 21, 19, 25, 23, 17, 20 °C. Сохраните их в массив temps.

temps = ...

Действие со всем массивом сразу

Главное, ради чего нужен NumPy: арифметика с массивом применяется к каждому элементу. Цикл при этом писать не нужно — он спрятан внутри NumPy и работает на скорости языка C.

[ ]Скидка 10 % на все цены
prices * 0.9
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
array([108. ,  72. ,  40.5, 270. ])

Получился новый массив, а prices не изменился. Точки после чисел (108.) значат, что числа дробные: целые цены, умноженные на 0.9, стали дробными, и NumPy не пишет ноль после точки. Лишние пробелы (108. ,) — тоже не ошибка: NumPy выравнивает числа в столбик. Так же работают +, -, / и ** (возведение в степень):

[ ]Другие операции с числом
print(prices + 50)   # доставка 50 ₽ к каждой позиции
print(prices / 2)    # половина цены
print(prices ** 2)   # квадрат каждого числа
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
[170 130  95 350]
[ 60.   40.   22.5 150. ]
[14400  6400  2025 90000]
[ ]Упражнение 2Градусы Фаренгейта решено

Переведите температуры temps из градусов Цельсия в градусы Фаренгейта по формуле F = C × 9 / 5 + 32. Результат сохраните в temps_f — это должен быть массив той же длины.

temps_f = ...

Список ведёт себя иначе

У обычного списка те же знаки означают совсем другое: * повторяет список, а + склеивает два списка.

[ ]Одна операция — разный результат
print(prices_list * 2)
print(prices * 2)
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
[120, 80, 45, 300, 120, 80, 45, 300]
[240 160  90 600]

А умножить список на дробное число Python не может вовсе:

[ ]Список на 0.9 не умножаетсяошибка: TypeError
prices_list * 0.9
Ошибкасохранённый · нажмите «Выполнить», чтобы получить свой
TypeError: can't multiply sequence by non-int of type 'float'
Вопрос

Что получится, если сложить два списка: [1, 2, 3] + [10, 20, 30]?

[ ]Упражнение 3Новые цены решено

Кофейня поднимает все цены из prices на 10 % и прибавляет к каждой 20 ₽ за стаканчик. Сохраните новые цены в массив new_prices. Сам prices не меняйте — он ещё пригодится.

new_prices = ...

Вопрос

Какой массив получится: np.array([10, 20]) / 4?

[ ]Упражнение 4Секунды в минуты решено

Длительность пяти треков в секундах: 185, 240, 210, 330, 150. Создайте массив seconds с этими числами, а потом массив minutes — те же длительности в минутах.

seconds = ...
minutes = ...

Итоги

  • NumPy подключают так: import numpy as np.
  • np.array(список) создаёт массив. Значение ячейки выглядит как array([...]), а print показывает элементы без запятых.
  • Арифметика с числом (+ - * / **) применяется к каждому элементу и даёт новый массив — без циклов.
  • У списков те же знаки значат другое: * повторяет список, + склеивает.

Подробнее в справочнике

Нашли ошибку?