Резюме | Операции с матрицами языка R

задняя часть
Резюме | Операции с матрицами языка R

в заключенииRЯзыковые матричные операции, изучение матричных операций, лучший способ - смоделировать данные, затем просмотреть результаты, испытать применение функции, а затем ее можно использовать для меня.

1.1 Генерация матрицы

Создайте матрицу с 4 строками и 4 столбцами, здесь используйте числа от 1 до 16.

mat <- matrix(1:16,4,4)

mat
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16

1.2 Извлечение главной диагонали

diag(mat)
  1. 1
  2. 6
  3. 11
  4. 16

1.3 Сгенерируйте диагональную матрицу с диагональю 1

m1 <- diag(4)

m1
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

1.4 Извлечение нижнего треугольника матрицы

mat[lower.tri(mat)]
  1. 2
  2. 3
  3. 4
  4. 7
  5. 8
  6. 12

1.5 Извлеките верхний треугольник матрицы

mat[upper.tri(mat)]
  1. 5
  2. 9
  3. 10
  4. 13
  5. 14
  6. 15

1.6 Построение диагональной матрицы из нижнего треугольника матрицы

mat1 <- mat

mat1[upper.tri(mat1)] <- t(mat1)[upper.tri(mat1)]


Оригинальный мат матричный:

mat
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16

Преобразованная диагональная матрица

mat1
1 2 3 4
2 6 7 8
3 7 11 12
4 8 12 16

1.7 Преобразование матрицы в строку и столбец

Исходная матрица, формирующая три столбца: строка, столбец, значение

mat
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16

Связанный код

nrow <- dim(mat)[1]

ncol <- dim(mat)[2]

row <- rep(1:nrow,ncol)

col <- rep(1:ncol, each=nrow)

frame <- data.frame(row,col,value =as.numeric(mat))

frame 
row col value
1 1 1
2 1 2
3 1 3
4 1 4
1 2 5
2 2 6
3 2 7
4 2 8
1 3 9
2 3 10
3 3 11
4 3 12
1 4 13
2 4 14
3 4 15
4 4 16

1.8 Преобразование формы из трех столбцов в матрицу

    nrow <- max(frame[, 1])

    ncol <- max(frame[, 2])

    y <- rep(0, nrow * ncol)

    y[(frame[, 2] - 1) * nrow + frame[, 1]] <- frame[, 3]

    y[(frame[, 1] - 1) * nrow + frame[, 2]] <- frame[, 3]

    matrix(y, nrow = nrow, ncol = ncol, byrow = T)
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16

1.9 Транспонирование матрицы

t(mat)
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

2. Матричные операции

2.1 Сложение и вычитание матриц

A=B=matrix(1:16,nrow=4,ncol=4)

A + B
2 10 18 26
4 12 20 28
6 14 22 30
8 16 24 32
A - B
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

2.2 Умножение чисел и матриц

c <- 2

c*A
2 10 18 26
4 12 20 28
6 14 22 30
8 16 24 32

2.3 Умножение матриц

A представляет собой матрицу размера m × n, а B представляет собой матрицу размера n × k с использованием «%*%».

A <- matrix(1:12,3,4)

B <- matrix(1:20,4,5)

A%*%B
70 158 246 334 422
80 184 288 392 496
90 210 330 450 570

2.4 Метод расчета t(A)%*%B

Первый – прямой расчет

A <- matrix(1:12,3,4)

B <- matrix(1:15,3,5)

t(A)%*%B
14 32 50 68 86
32 77 122 167 212
50 122 194 266 338
68 167 266 365 464

Второй метод, использующий функцию crossprod, более эффективен при большом объеме данных.

A <- matrix(1:12,3,4)

B <- matrix(1:15,3,5)

crossprod(A,B)
14 32 50 68 86
32 77 122 167 212
50 122 194 266 338
68 167 266 365 464

2.5 Матричная инверсия

a <- matrix(rnorm(16),4,4)

solve(a)
-3.542393 5.8825038 -3.2421870 6.9619170
1.081745 -2.2446318 1.4850549 -2.0828270
-1.577580 2.4698567 -0.7070850 2.5241525
-0.830685 0.5105919 -0.3352182 0.5344842

Произведение матрицы и ее обратной является диагональной матрицей

round(solve(a)%*%a)
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

2.6 Обобщенные обратные матрицы

Для сингулярных матриц обратной матрицы нет, но можно вычислить ее обобщенную обратную матрицу

a <- matrix(1:16,4,4)

solve(a)
Error in solve.default(a): Lapack例行程序dgesv: 系统正好是奇异的: U[3,3] = 0
Traceback:


1. solve(a)

2. solve.default(a)

Отобразите сингулярность матрицы, здесь вы можете использовать ginv пакета MASS для вычисления ее обобщенной обратной матрицы.

library(MASS)

a <- matrix(1:16,4,4)

ginv(a)
-0.285 -0.1075 0.07 0.2475
-0.145 -0.0525 0.04 0.1325
-0.005 0.0025 0.01 0.0175
0.135 0.0575 -0.02 -0.0975

2.7 Прямое произведение матриц (Кронекера, произведение Кронекера), вычисляемое с помощью функции Кронекера

Прямой продукт A и B:ABA \bigotimes B, LaTex пишет "A \bigotimes B"

Предположим, что A — матрица 2X2.

A <- matrix(c(10,5,5,20),2,2)

A
10 5
5 20

Предположим, что B — матрица 3X3.

B <- matrix(c(1,0,2,0,1,4,2,4,1),3,3)

B
1 0 2
0 1 4
2 4 1

Тогда прямое произведение A и B представляет собой матрицу 6X6.

kronecker(A,B)
10 0 20 5 0 10
0 10 40 0 5 20
20 40 10 10 20 5
5 0 10 20 0 40
0 5 20 0 20 80
10 20 5 40 80 20

2.8 Прямая сумма матриц

формула:AB A\oplus B, что в LaTex означает "A\oplus B"

在这里插入图片描述

A <- matrix(c(1,2,3,3,2,1),2,3)

A
1 3 2
2 3 1
B <- matrix(c(1,0,6,1),2,2)

B
1 6
0 1
r1 <- dim(A)[1];c1 <- dim(A)[2]

r2 <- dim(B)[1];c2 <- dim(B)[2]

direct_sum <- rbind(cbind(A,matrix(0,r2,c2)),cbind(matrix(0,r1,c1),B))

direct_sum
1 3 2 0 0
2 3 1 0 0
0 0 0 1 6
0 0 0 0 1