English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

R 矩阵

R 语言为线性代数的研究提供了矩阵类型,这种数据结构很类似于其它语言中的二维数组,但 R 提供了语言级的矩阵运算支持。

矩阵里的元素可以是数字、符号或数学式。

一个  M  x N 的矩阵是一个由 M(row) 行N 列(column)元素排列成的矩形阵列。

以下是一个由 6 个数字元素构成的 2 行 3 列的矩阵:

R 语言的矩阵可以使用  matrix() 函数来创建,语法格式如下:

matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,dimnames = NULL)

参数说明:

  • data 向量,矩阵的数据

  • nrow 行数

  • ncol 列数

  • byrow 逻辑值,为 FALSE 按列排列,为 TRUE 按行排列

  • dimname 设置行和列的名称

创建一个数字矩阵:

# byrow 为 TRUE 元素按行排列
M <- matrix(c(3:14), nrow = 4, byrow = TRUE)
print(M)
# Ebyrow 为 FALSE 元素按列排列
N <- matrix(c(3:14), nrow = 4, byrow = FALSE)
print(N)
# definire i nomi delle righe e delle colonne
rownames <- c("row1", "row2", "row3", "row4")
colnames <- c("col1", "col2", "col3")
P <- matrix(c(3:14), nrow = 4, byrow = TRUE, dimnames = list(rownames, colnames))
print(P)

执行以上代码输出结果为:

[,1] [,2] [,3]
[1,]  3  4  5
[2,]  6  7  8
[3,]  9  10  11
[4,]  12  13  14
     [,1] [,2] [,3]
[1,]  3  7  11
[2,]  4  8  12
[3,]  5  9  13
[4,]  6  10  14
     col1 col2 col3
row1    3    4    5
row2    6    7    8
row3    9    10    11
row4   12   13   14

trasformazione di matrice

R Language fornisce la funzione t(), che può essere utilizzata per invertire le righe e le colonne di una matrice.

Ad esempio, una matrice di dimensioni m x n può essere trasformata in una matrice n x m utilizzando la funzione t().

# creare una matrice 2x3
M <- matrix(c(2,6,5,1,10,4), nrow = 2, ncol = 3, byrow = TRUE)
print(M)
     [,1] [,2] [,3]
[1,]    2    6    5
[2,]    1    10    4
# trasformare in una matrice 3x2
print(t(M))

执行以上代码输出结果为:

     [,1] [,2] [,3]
[1,]    2    6    5
[2,]    1    10    4
[1] "-----trasformazione-----"
     [,1] [,2]
[1,]    2    1
[2,]    6    10
[3,]    5    4

accesso agli elementi della matrice

Se si desidera ottenere un elemento della matrice, è possibile utilizzare l'indice della colonna e dell'indice della riga, come in un sistema di coordinate.

# definire i nomi delle righe e delle colonne
rownames <- c("row1", "row2", "row3", "row4")
colnames <- c("col1", "col2", "col3")
# creare una matrice
P <- matrix(c(3:14), nrow = 4, byrow = TRUE, dimnames = list(rownames, colnames))
print(P)
# ottenere l'elemento della prima riga e della terza colonna
print(P[1,3])
# ottenere l'elemento della quarta riga e della seconda colonna
print(P[4,2])
# ottenere la seconda riga
print(P[2,])
# ottenere la terza colonna
print(P[,3])

执行以上代码输出结果为:

col1 col2 col3
row1    3    4    5
row2    6    7    8
row3    9    10    11
row4   12   13   14
[1] 5
[1] 13
col1 col2 col3 
    6    7    8 
row1 row2 row3 row4 
    5    8    11    14

calcolo delle matrici

Le matrici di dimensioni identiche (numero di righe e colonne uguali) possono essere sommate o sottratte, operando l'addizione o la sottrazione sui singoli elementi delle posizioni corrispondenti. Il prodotto di matrici è più complesso. Due matrici possono essere moltiplicate tra loro, e solo se il numero di colonne della prima matrice è uguale al numero di righe della seconda matrice.

addizione e sottrazione di matrici

# 创建 2 行 3 列的矩阵
matrix1 <- matrix(c(7, 9, -1, 4, 2, 3), nrow = 2)
print(matrix1)
matrix2 <- matrix(c(6, 1, 0, 9, 3, 2), nrow = 2)
print(matrix2)
# somma di due matrici
result <- matrix1 + matrix2
cat("risultato somma:","\n")
print(result)
# 两个矩阵相减
result <- matrix1 - matrix2
cat("相减结果:","\n")
print(result)

执行以上代码输出结果为:

[,1] [,2] [,3]
[1,] 7 -1 2
[2,] 9 4 3
     [,1] [,2] [,3]
[1,] 6 0 3
[2,] 1 9 2
相加结果: 
     [,1] [,2] [,3]
[1,] 13 -1 5
[2,] 10 13 5
相减结果: 
     [,1] [,2] [,3]
[1,] 1 -1 -1
[2,] 8 -5 1

矩阵乘除法

# 创建 2 行 3 列的矩阵
matrix1 <- matrix(c(7, 9, -1, 4, 2, 3), nrow = 2)
print(matrix1)
matrix2 <- matrix(c(6, 1, 0, 9, 3, 2), nrow = 2)
print(matrix2)
# 两个矩阵相乘
result <- matrix1 * matrix2
cat("相乘结果:","\n")
print(result)
# 两个矩阵相除
result <- matrix1 / matrix2
cat("相除结果:","\n")
print(result)

执行以上代码输出结果为:

[,1] [,2] [,3]
[1,] 7 -1 2
[2,] 9 4 3
     [,1] [,2] [,3]
[1,] 6 0 3
[2,] 1 9 2
相乘结果: 
     [,1] [,2] [,3]
[1,] 42 0 6
[2,] 9 36 6
相除结果: 
         [,1] [,2] [,3]
[1,] 1.166667 -Inf 0.6666667
[2,] 9.000000 0.4444444 1.5000000