Шаг 35.
Однострочники Python.
Наука о данных. Простейшие операции с двумерными массивами (окончание)

    На этом шаге мы приведем решение сформулированной в конце предыдущего шага задачи.

Код

    Попробуем решить сформулированную в конце предыдущего шага задачу на основе данных о зарплате Алисы, Боба и Тима. Похоже, что у Боба последние три года самая высокая зарплата из наших троих друзей. Но приносит ли он домой действительно больше всех денег с учетом индивидуальных ставок налогообложения? Посмотрим на пример 3.4.


Пример 3.4. Однострочное решение на основе простейших арифметических операций с массивами
## Зависимости
import numpy as np

## Данные: годовые зарплаты в тысячах долларов (за 2017, 2018 и 2019 гг.)
alice = [99, 101, 103]
bob = [110, 108, 105]
tim = [90, 88, 85]

salaries = np.array([alice, bob, tim])
taxation = np.array([[0.2, 0.25, 0.22],
                     [0.4, 0.5, 0.5],
                     [0.1, 0.2, 0.1]])

## Однострочник
max_income = np.max(salaries - salaries * taxation)

## Результат
print(max_income)
Архив с файлом можно взять здесь.

    Попробуйте догадаться: каковы будут результаты выполнения этого кода?

Принцип работы

    После импорта библиотеки NumPy мы помещаем данные в двумерный массив NumPy, содержащий три строки (по одной строке для каждого человека: Алисы, Боба и Тима) и три столбца (по одному столбцу для каждого года: 2017, 2018 и 2019). У нас два двумерных массива:

    Для вычисления чистого дохода необходимо вычесть налоги (в долларах) из валового дохода, хранящегося в массиве salaries. Для этого мы воспользуемся перегруженными операторами NumPy - и *, выполняющими поэлементные вычисления с массивами NumPy.

    Поэлементное произведение двух многомерных массивов называется произведением Адамара.

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


Пример 3.5. Простейшие арифметические операции над массивами
print(salaries - salaries * taxation)
# [[79.2  75.75 80.34]
#  [66.   54.   52.5 ]
#  [81.   70.4  76.5 ]]

    Как видим из второй строки, высокий доход Боба существенно снизился после уплаты 40 и 50% налогов.

    Предыдущий фрагмент кода выводит максимальное значение этого итогового массива. Функция np.max() просто находит в массиве максимальное значение, которое мы затем сохраняем в переменной max_income. Максимальным значением оказывается доход Тима, равный 90 000 долларов в 2017 году, облагаемый налогом всего 10% - результат выполнения однострочника равен 81. (опять же, точка в конце указывает на тип данных float).

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

    На следующем шаге мы рассмотрим срезы, транслирование и типы массивов.




Предыдущий шаг Содержание