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

Матрично-векторные произведения через оператор @

Содержание курса

Система мониторинга дронов: матрица линейного преобразования для облака точек

Контекст задачи

Компания «АэроЛог» разрабатывает систему мониторинга беспилотных дронов на складском комплексе. Каждый дрон оснащён лидаром, который периодически фиксирует облако опорных точек в локальной системе координат дрона. Когда дрон разворачивается или меняет ориентацию, бортовой компьютер должен пересчитать координаты всех точек в новой системе отсчёта — иначе карта склада «поедет» и дрон врежется в стеллаж.

Оператор наземной станции Виктор получает от дрона два блока данных: матрицу линейного преобразования (она кодирует поворот, отражение или масштабирование осей) и список двумерных точек в старой системе координат. Виктор хочет автоматически получать пересчитанные координаты, чтобы отображать их на интерактивной карте склада в реальном времени.

Откуда берётся матрица преобразования

Инженеры «АэроЛог» договорились о следующем соглашении: матрица T размером 2×2 хранится построчно, и каждая строка T задаёт коэффициенты для одной выходной координаты результата. То есть первая строка T[0] содержит веса (a, b), по которым вычисляется первая координата преобразованной точки: x' = a·x + b·y. Вторая строка T[1] содержит веса для второй координаты: y' = c·x + d·y.

Чтобы применить такое преобразование сразу ко всем точкам одновременно, инженеры используют матричное умножение P @ T.T, где P — матрица точек (каждая строка — одна точка (x, y)), а T.T — транспонированная матрица T. Транспонирование необходимо: оно переводит строки T (задающие компоненты результата) в столбцы, чтобы при умножении строки-точки из P на столбец T.T получалась нужная выходная координата. Без транспонирования результат будет математически неверным.

Что нужно Виктору

Виктор хочет видеть не только сами пересчитанные координаты, но и форму (shape) всех промежуточных матриц — это помогает его коллегам-аналитикам проверять корректность пайплайна обработки данных. Поэтому первая строка вывода всегда содержит четыре shape-метки через пробел: для P, для T, для T.T и для результата Q. Хотя T и T.T имеют одинаковый shape (2, 2), их метки выводятся отдельно — это требование внутреннего регламента аудита.

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


Формальный контракт

Входные данные (stdin)

Программа читает данные из стандартного потока ввода в следующем порядке:

  1. Первая строка — четыре вещественных числа через пробел: t00 t01 t10 t11. Это элементы матрицы преобразования T построчно: первая строка T равна [t00, t01], вторая — [t10, t11]. Создайте T = np.array([[t00, t01], [t10, t11]], dtype=float), shape (2, 2).
  2. Вторая строка — целое число n (гарантируется n >= 2) — количество точек.
  3. Следующие n строк — каждая содержит два вещественных числа x y через пробел. Создайте матрицу точек P = np.array(..., dtype=float) shape (n, 2), где каждая строка — одна точка.

Вычисления

Вычислите матрицу преобразованных точек: Q = P @ T.T (оператором @). Форма результата Q(n, 2).

Выходные данные (stdout)

Выведите в стандартный поток вывода:

  1. Первая строка — четыре shape-метки через пробел в формате Python-кортежей:
(n, 2) (2, 2) (2, 2) (n, 2)

Порядок строго фиксирован: P.shape, затем T.shape, затем T.T.shape, затем Q.shape.

  1. Следующие n строк — строки матрицы Q. Каждая строка содержит два числа через пробел, каждое округлено до ровно двух знаков после запятой.

Шаблон формата вывода

(n, 2) (2, 2) (2, 2) (n, 2)
Q[0][0] Q[0][1]
Q[1][0] Q[1][1]
...
Q[n-1][0] Q[n-1][1]
О данных в ответах

Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.

Проверяется тестами (1)
  • Тест 1
    Ввод
    0 -1 1 0
    3
    1.0 0.0
    0.0 1.0
    2.0 3.0
    
    Ожидаемый вывод
    (3, 2) (2, 2) (2, 2) (3, 2)
    0.00 1.00
    -1.00 0.00
    -3.00 2.00
    
Решение
Как проверяется решение

Сравнение вывода: Правила исходной проверяющей системы. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.

Отправьте решение, чтобы увидеть результаты тестов.