Матрично-векторные произведения через оператор @
Содержание курса
Система мониторинга дронов: матрица линейного преобразования для облака точек
Контекст задачи
Компания «АэроЛог» разрабатывает систему мониторинга беспилотных дронов на складском комплексе. Каждый дрон оснащён лидаром, который периодически фиксирует облако опорных точек в локальной системе координат дрона. Когда дрон разворачивается или меняет ориентацию, бортовой компьютер должен пересчитать координаты всех точек в новой системе отсчёта — иначе карта склада «поедет» и дрон врежется в стеллаж.
Оператор наземной станции Виктор получает от дрона два блока данных: матрицу линейного преобразования (она кодирует поворот, отражение или масштабирование осей) и список двумерных точек в старой системе координат. Виктор хочет автоматически получать пересчитанные координаты, чтобы отображать их на интерактивной карте склада в реальном времени.
Откуда берётся матрица преобразования
Инженеры «АэроЛог» договорились о следующем соглашении: матрица 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)
Программа читает данные из стандартного потока ввода в следующем порядке:
- Первая строка — четыре вещественных числа через пробел:
t00 t01 t10 t11. Это элементы матрицы преобразованияTпострочно: первая строкаTравна[t00, t01], вторая —[t10, t11]. СоздайтеT = np.array([[t00, t01], [t10, t11]], dtype=float), shape(2, 2). - Вторая строка — целое число
n(гарантируетсяn >= 2) — количество точек. - Следующие
nстрок — каждая содержит два вещественных числаx yчерез пробел. Создайте матрицу точекP = np.array(..., dtype=float)shape(n, 2), где каждая строка — одна точка.
Вычисления
Вычислите матрицу преобразованных точек: Q = P @ T.T (оператором @). Форма результата Q — (n, 2).
Выходные данные (stdout)
Выведите в стандартный поток вывода:
- Первая строка — четыре shape-метки через пробел в формате Python-кортежей:
(n, 2) (2, 2) (2, 2) (n, 2)
Порядок строго фиксирован: P.shape, затем T.shape, затем T.T.shape, затем Q.shape.
- Следующие
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Ввод
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 секунд.
Отправьте решение, чтобы увидеть результаты тестов.
