Оценить:
 Рейтинг: 0

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

Год написания книги
2019
<< 1 ... 5 6 7 8 9
На страницу:
9 из 9
Настройки чтения
Размер шрифта
Высота строк
Поля

Заметьте, что здесь plot () использует гистограмму как метод рисунка, потому что он «видит», что fr имеет класс «таблица». «Очевидный» способ решить эту задачу с циклом for обсуждается в Главе 9 [Циклы и условное выполнение], что является как неэффективным, так и непрактичным.

Также, возможно, удивительно, что приблизительно 1 из 20 матриц сингулярная.

5.6. Обобщенное транспонирование массива

Можно использовать функцию aperm (a, perm) для перестановки массива a. Параметром perm должна быть перестановка целых чисел {1, …., к}, где k является номером нижних индексов в a. Результат функции – массив того же самого размера как 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

x или xx

, где x – столбец. В таких случаях меньшая матрица, кажется, неявно принятая интерпретация, таким образом, скаляр x

x является результатом в этом случае. Матрица xx

может быть вычислена или как cbind (x) %*%x или x%*%rbind (x), так как результатом rbind () или cbind () всегда является матрица. Однако лучшим способом вычислить x

x или xx

является 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 = А

b, где А

 обозначает инверсию A, которая может быть вычислена:


Вы ознакомились с фрагментом книги.
Приобретайте полный текст книги у нашего партнера:
<< 1 ... 5 6 7 8 9
На страницу:
9 из 9