Введение в R версия 3.5.2 (2018-12-20). Заметки по R: среда программирования для анализа данных и графики - страница 14



. Результат функции – массив того же самого размера как a, но со старой размерностью, вычисленной perm [j], становящейся новой j-й размерностью. Самый простой способ понимания этой операции – это обобщение транспонирования для матриц. Действительно, если A – матрица, (то есть, вдвойне преобразованный в нижний индекс массив) тогда B вычисляется путем:

> B <-aperm (A, c (2,1))

и представляет собой транспонирование. Для этого особого случая доступна более простая функция t (), таким образом, возможно, использовать B <-t (A).

5.7. Матричные инструменты

Как отмечено выше, матрица – это массив с двумя нижними индексами. Однако это такой важный особый случай, что нуждается в отдельном обсуждении. R содержит много операторов и функций, которые доступны только для матриц. Например, t (X) – функция транспонирующая матрицу, как отмечено выше. Функции nrow (A) и ncol (A) дают число строк и столбцов в матрице соответственно.

5.7.1. Умножение матриц

Оператор %*% используется для умножения матриц. Матрицы n-на-1 или 1-на-n могут, конечно, использоваться в качестве n-вектора, если это соответствует контексту. Наоборот, векторы, которые встречаются в выражениях умножения матриц, если возможно автоматически расширяются или на вектор строки или на вектор столбца, который является мультипликативно соответствующим (хотя это не всегда однозначно возможно, как увидим позже).

Если, например, A и B – квадратные матрицы одинакового размера, то

> А * B

матрица поэлементно произведений и

> % * % B

матричное произведение. Если x – вектор, то

> x %*% %*%x

квадратная форма.

Обратите внимание на то, что x%*%x является неоднозначным, поскольку может означать или x>Tx или xx>T, где x – столбец. В таких случаях меньшая матрица, кажется, неявно принятая интерпретация, таким образом, скаляр x>Tx является результатом в этом случае. Матрица xx>T может быть вычислена или как cbind (x) %*%x или x%*%rbind (x), так как результатом rbind () или cbind () всегда является матрица. Однако лучшим способом вычислить x>Tx или xx>T является crossprod (x) или x%o%x соответственно.

Функция crossprod () формирует «векторные произведения», значение, что crossprod (X, y) является таким же, как t (X) %*% y, но выполняется более эффективно. Если второй параметр crossprod () опущен, то получаем то же, что в первом случае.

Значение diag () зависит от ее аргумента. diag (v), где v – вектор, дает диагональную матрицу с элементами вектора в качестве диагональных значений. С другой стороны diag (M), где М является матрицей, дает вектор основных диагональных значений М. Это одинаковое соглашение с тем, как используется diag () в Matlab. Кроме того, не очень четко, если k является единственным числовым значением, то diag (k) является k-на-k единичной матрицей!

5.7.2. Линейные уравнения и инверсия

Решение линейных уравнений является инверсией умножения матриц. Когда после

> b <– A %*% x

только A и b даны, вектор x является решением этой системы линейных уравнений. В R

> solve (A, b)

решает систему, возвращая x (с некоторой потерей точности). Заметим, что в линейной алгебре, формально x = А>-1b, где А>-1 обозначает инверсию A, которая может быть вычислена:

Конец ознакомительного фрагмента.

Если вам понравилась книга, поддержите автора, купив полную версию по ссылке ниже.

Продолжить чтение