В прошлом уроке массив встречался с числом. Но чаще данные приходят парами: цены и количества, план и факт, утро и вечер. Два массива одной длины NumPy складывает, вычитает, умножает и делит поэлементно: первый элемент с первым, второй со вторым и так далее.
import numpy as np
prices = np.array([120, 80, 45, 300])
qty = np.array([3, 5, 10, 1])
prices * qtyarray([360, 400, 450, 300])
Получилась стоимость каждой позиции: 120 × 3, 80 × 5, 45 × 10 и 300 × 1. Никакого цикла по индексам — NumPy
сам ставит элементы в пары по порядку. Поэтому порядок важен: в qty на первом месте должно стоять
количество именно первого товара.
Так же работают вычитание и деление:
plan = np.array([50, 40, 60])
fact = np.array([46, 44, 60])
print(fact - plan) # на сколько отличается от плана
print(fact / plan) # какая доля плана выполнена[-4 4 0] [0.92 1.1 1. ]
В массивах morning и evening — число чашек кофе, проданных утром и вечером в каждый день недели. Сохраните
в total продажи за каждый день целиком.
morning + evening даст сумму для каждого дня.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
morning = np.array([34, 41, 38, 45, 52, 60, 58])
evening = np.array([21, 25, 19, 30, 44, 51, 40])
total = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
morning = np.array([34, 41, 38, 45, 52, 60, 58])
evening = np.array([21, 25, 19, 30, 44, 51, 40])
total = morning + eveningЦелочисленное деление и остаток
Обычное деление / всегда даёт дробное число. Иногда нужно другое: сколько целых раз одно число
помещается в другом — это //, и что осталось — это % (остаток от деления). Например, минуты в часы
и минуты:
minutes = np.array([75, 130, 45, 200])
print(minutes // 60) # целые часы
print(minutes % 60) # оставшиеся минуты[1 2 0 3] [15 10 45 20]
75 минут — это 1 час (75 // 60) и 15 минут (75 % 60). И //, и % работают поэлементно — с числом и
с другим массивом.
Длительность звонков в секундах лежит в массиве calls. Сохраните в mins целые минуты каждого звонка, а в
secs — оставшиеся секунды: например, 130 секунд — это 2 минуты и 10 секунд.
Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
calls = np.array([130, 59, 360, 245, 61])
mins = ...
secs = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
calls = np.array([130, 59, 360, 245, 61])
mins = calls // 60
secs = calls % 60Что получится: np.array([1, 2, 3]) * np.array([2, 2, 2])?
* у списков, а сумма попарных произведений — отдельная операция (скалярное произведение, будет в модуле про линейную алгебру).Когда длины разные
Пары можно составить, только если у массивов одинаковая длина. Проверить длину помогает встроенная функция
len — она работает и с массивами:
print(len(prices), len(qty))
print(len(np.array([1, 2, 3])))4 4 3
Если длины не совпадают, NumPy не станет угадывать, кого с кем сложить, и сообщит об ошибке:
np.array([1, 2, 3]) + np.array([10, 20])ValueError: operands could not be broadcast together with shapes (3,) (2,)
В revenue — выручка кофейни за пять дней, в checks — сколько в эти дни было покупок. Посчитайте средний
чек каждого дня — выручку, делённую на число покупок, — и сохраните в avg_check.
revenue этого дня, делённая на checks этого же дня: разделите массив на массив.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
revenue = np.array([18400, 21150, 16800, 25300, 30600])
checks = np.array([92, 105, 80, 110, 136])
avg_check = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
revenue = np.array([18400, 21150, 16800, 25300, 30600])
checks = np.array([92, 105, 80, 110, 136])
avg_check = revenue / checksМенеджеры по пяти городам получили план продаж goal и выполнили done. Посчитайте процент выполнения плана
по каждому городу — done от goal, умноженное на 100, — и сохраните в percent.
done / goal; чтобы получить проценты, умножьте долю на 100.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
goal = np.array([500, 320, 280, 150, 200])
done = np.array([540, 288, 280, 90, 230])
percent = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
goal = np.array([500, 320, 280, 150, 200])
done = np.array([540, 288, 280, 90, 230])
percent = done / goal * 100Итоги
- Два массива одной длины складываются, вычитаются, умножаются и делятся поэлементно — пара за парой.
//— целочисленное деление,%— остаток; оба работают поэлементно.len(массив)— число элементов.- Разная длина — ошибка
ValueErrorпро broadcast.