R语言 矩阵

R语言 矩阵

矩阵 是数字在行和列中的一种矩形排列。在一个矩阵中,我们知道行是水平方向的,列是垂直方向的。在R编程中,矩阵是二维的、同质的数据结构。这些是一些矩阵的例子:

R - 矩阵

创建一个矩阵

要在R语言中创建一个矩阵,你需要使用名为 matrix() 的函数 。 这个 matrix() 的参数是向量中元素的集合。你必须传递你希望在你的矩阵中拥有多少行和多少列。

注意: 默认情况下,矩阵是按列顺序排列的。

# R program to create a matrix
  
A = matrix(
     
  # Taking sequence of elements 
  c(1, 2, 3, 4, 5, 6, 7, 8, 9),
   
  # No of rows
  nrow = 3,  
   
  # No of columns
  ncol = 3,        
   
  # By default matrices are in column-wise order
  # So this parameter decides how to arrange the matrix
  byrow = TRUE         
)
  
# Naming rows
rownames(A) = c("a", "b", "c")
  
# Naming columns
colnames(A) = c("c", "d", "e")
  
cat("The 3x3 matrix:\n")
print(A)
R

输出:

The 3x3 matrix:
  c d e
a 1 2 3
b 4 5 6
c 7 8 9
R

创建特殊的矩阵

R允许通过使用传递给matrix()函数的参数来创建各种不同类型的矩阵。

  • 所有行和列都由一个常数’k填充的矩阵

    要创建这样一个矩阵,语法如下:

语法: matrix(k, m, n)

参数:

k: 常数

m: 行的数量

n: 列的数量

  • 示例:
# R program to illustrate
# special matrices
 
# Matrix having 3 rows and 3 columns
# filled by a single constant 5
print(matrix(5, 3, 3))
R
  • 输出:
     [,1] [,2] [,3]
[1,]    5    5    5
[2,]    5    5    5
[3,]    5    5    5
R
  • 对角线矩阵:

    对角线矩阵是一个矩阵,其中主对角线以外的条目都是零。要创建这样一个矩阵,语法如下:

语法: diag(k, m, n)

参数:

k: 常数/数组

m: 行的数量

n: 列的数量

  • 示例:
# R program to illustrate
# special matrices
 
# Diagonal matrix having 3 rows and 3 columns
# filled by array of elements (5, 3, 3)
print(diag(c(5, 3, 3), 3, 3))
R
  • 输出:
     [,1] [,2] [,3]
[1,]    5    0    0
[2,]    0    3    0
[3,]    0    0    3
R
  • 单位矩阵:

    一个正方形矩阵,其中主对角线上的所有元素都是1,其他元素都是0。要创建这样的矩阵,语法如下:

语法: diag(k, m, n)

参数:

k: 1

m: 行的数量

n: 列的数量

  • 示例:
# R program to illustrate
# special matrices
 
# Identity matrix having
# 3 rows and 3 columns
print(diag(1, 3, 3))
R
  • 输出:
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    0
[3,]    0    0    1
R

矩阵度量

矩阵度量是指一旦创建了一个矩阵,那么

  • 你如何知道矩阵的维度?
  • 你怎么能知道矩阵中有多少行?
  • 矩阵中有多少列?
  • 矩阵中有多少个元素? 是我们通常想要回答的问题。

例如:

# R program to illustrate
# matrix metrics
 
# Create a 3x3 matrix
A = matrix(
  c(1, 2, 3, 4, 5, 6, 7, 8, 9),
  nrow = 3,            
  ncol = 3,            
  byrow = TRUE         
)
cat("The 3x3 matrix:\n")
print(A)
 
cat("Dimension of the matrix:\n")
print(dim(A))
 
cat("Number of rows:\n")
print(nrow(A))
 
cat("Number of columns:\n")
print(ncol(A))
 
cat("Number of elements:\n")
print(length(A))
# OR
print(prod(dim(A)))
R

输出:

The 3x3 matrix:
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
Dimension of the matrix:
[1] 3 3
Number of rows:
[1] 3
Number of columns:
[1] 3
Number of elements:
[1] 9
[1] 9
R

访问矩阵中的元素

我们可以使用与数据框架相同的约定来访问矩阵中的元素。所以,你会有一个矩阵,后面是一个方括号,在数组之间有一个逗号。逗号之前的值用于访问行,逗号之后的值用于访问列。让我们通过一个简单的R代码来说明这个问题。

访问行:

# R program to illustrate
# access rows in metrics
 
# Create a 3x3 matrix
A = matrix(
  c(1, 2, 3, 4, 5, 6, 7, 8, 9),
  nrow = 3,            
  ncol = 3,            
  byrow = TRUE         
)
cat("The 3x3 matrix:\n")
print(A)
 
# Accessing first and second row
cat("Accessing first and second row\n")
print(A[1:2, ])
R

输出:

The 3x3 matrix:
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    4    5    6
[3, ]    7    8    9

Accessing first and second row
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    4    5    6
R

访问列:

# R program to illustrate
# access columns in metrics
 
# Create a 3x3 matrix
A = matrix(
  c(1, 2, 3, 4, 5, 6, 7, 8, 9),
  nrow = 3,            
  ncol = 3,            
  byrow = TRUE         
)
cat("The 3x3 matrix:\n")
print(A)
 
# Accessing first and second column
cat("Accessing first and second column\n")
print(A[, 1:2])
R

输出:

The 3x3 matrix:
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    4    5    6
[3, ]    7    8    9

Accessing first and second column
     [, 1] [, 2]
[1, ]    1    2
[2, ]    4    5
[3, ]    7    8
R

访问矩阵的元素:

# R program to illustrate
# access an entry in metrics
 
# Create a 3x3 matrix
A = matrix(
  c(1, 2, 3, 4, 5, 6, 7, 8, 9),
  nrow = 3,            
  ncol = 3,            
  byrow = TRUE         
)
cat("The 3x3 matrix:\n")
print(A)
 
# Accessing 2
print(A[1, 2])
 
# Accessing 6
print(A[2, 3])
R

输出:

The 3x3 matrix:
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    4    5    6
[3, ]    7    8    9

[1] 2
[1] 6
R

访问子矩阵:

我们可以使用 冒号(:) 操作符访问矩阵中的子矩阵。

# R program to illustrate
# access submatrices in a matrix
 
# Create a 3x3 matrix
A = matrix(
  c(1, 2, 3, 4, 5, 6, 7, 8, 9),
  nrow = 3,            
  ncol = 3,            
  byrow = TRUE         
)
cat("The 3x3 matrix:\n")
print(A)
 
cat("Accessing the first three rows and the first two columns\n")
print(A[1:3, 1:2])
R

输出:

The 3x3 matrix:
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    4    5    6
[3, ]    7    8    9

Accessing the first three rows and the first two columns
     [, 1] [, 2]
[1, ]    1    2
[2, ]    4    5
[3, ]    7    8
R

修改矩阵的元素

在R中,你可以通过直接赋值来修改矩阵的元素。

例子:

# R program to illustrate
# editing elements in metrics
 
# Create a 3x3 matrix
A = matrix(
  c(1, 2, 3, 4, 5, 6, 7, 8, 9),
  nrow = 3,            
  ncol = 3,            
  byrow = TRUE         
)
cat("The 3x3 matrix:\n")
print(A)
 
# Editing the 3rd rows and 3rd column element
# from 9 to 30
# by direct assignments
A[3, 3] = 30
 
cat("After edited the matrix\n")
print(A)
R

输出:

The 3x3 matrix:
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    4    5    6
[3, ]    7    8    9

After edited the matrix
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    4    5    6
[3, ]    7    8   30
R

矩阵连接

矩阵连接是指合并现有矩阵的行或列。

行的连接:
行与矩阵的连接是用 rbind() 完成的 。

# R program to illustrate
# concatenation of a row in metrics
 
# Create a 3x3 matrix
A = matrix(
  c(1, 2, 3, 4, 5, 6, 7, 8, 9),
  nrow = 3,            
  ncol = 3,            
  byrow = TRUE         
)
cat("The 3x3 matrix:\n")
print(A)
 
# Creating another 1x3 matrix
B = matrix(
  c(10, 11, 12),
  nrow = 1,
  ncol = 3
)
cat("The 1x3 matrix:\n")
print(B)
 
# Add a new row using rbind()
C = rbind(A, B)
 
cat("After concatenation of a row:\n")
print(C)
R

输出:

The 3x3 matrix:
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    4    5    6
[3, ]    7    8    9

The 1x3 matrix:
     [, 1] [, 2] [, 3]
[1, ]   10   11   12

After concatenation of a row:
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    4    5    6
[3, ]    7    8    9
[4, ]   10   11   12
R

列的连接:
列与矩阵的连接是通过 cbind() 完成的 。

# R program to illustrate
# concatenation of a column in metrics
 
# Create a 3x3 matrix
A = matrix(
  c(1, 2, 3, 4, 5, 6, 7, 8, 9),
  nrow = 3,            
  ncol = 3,            
  byrow = TRUE         
)
cat("The 3x3 matrix:\n")
print(A)
 
# Creating another 3x1 matrix
B = matrix(
  c(10, 11, 12),
  nrow = 3,
  ncol = 1,
  byrow = TRUE
)
cat("The 3x1 matrix:\n")
print(B)
 
# Add a new column using cbind()
C = cbind(A, B)
 
cat("After concatenation of a column:\n")
print(C)
R

输出:

The 3x3 matrix:
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    4    5    6
[3, ]    7    8    9

The 3x1 matrix:
     [, 1]
[1, ]   10
[2, ]   11
[3, ]   12

After concatenation of a column:
     [, 1] [, 2] [, 3] [, 4]
[1, ]    1    2    3   10
[2, ]    4    5    6   11
[3, ]    7    8    9   12
R

尺寸不一致: 注意,在做这个矩阵连接之前,你必须确保矩阵之间尺寸的一致性。

# R program to illustrate
# Dimension inconsistency in metrics concatenation
 
# Create a 3x3 matrix
A = matrix(
  c(1, 2, 3, 4, 5, 6, 7, 8, 9),
  nrow = 3,            
  ncol = 3,            
  byrow = TRUE         
)
cat("The 3x3 matrix:\n")
print(A)
 
# Creating another 1x3 matrix
B = matrix(
  c(10, 11, 12),
  nrow = 1,
  ncol = 3,
)
cat("The 1x3 matrix:\n")
print(B)
 
# This will give an error
# because of dimension inconsistency
C = cbind(A, B)
 
cat("After concatenation of a column:\n")
print(C)
R

输出:

The 3x3 matrix:
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    4    5    6
[3, ]    7    8    9

The 1x3 matrix:
     [, 1] [, 2] [, 3]
[1, ]   10   11   12

Error in cbind(A, B) : number of rows of matrices must match (see arg 2)
R

删除矩阵的行和列

要删除一行或一列,首先需要访问该行或列,然后在该行或列前插入一个负号。它表示你必须删除该行或列。

行的删除:

# R program to illustrate
# row deletion in metrics
 
# Create a 3x3 matrix
A = matrix(
  c(1, 2, 3, 4, 5, 6, 7, 8, 9),
  nrow = 3,            
  ncol = 3,            
  byrow = TRUE         
)
cat("Before deleting the 2nd row\n")
print(A)
 
# 2nd-row deletion
A = A[-2, ]
 
cat("After deleted the 2nd row\n")
print(A)
R

输出:

Before deleting the 2nd row
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    4    5    6
[3, ]    7    8    9

After deleted the 2nd row
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    7    8    9
R

列的删除:

# R program to illustrate
# column deletion in metrics
 
# Create a 3x3 matrix
A = matrix(
  c(1, 2, 3, 4, 5, 6, 7, 8, 9),
  nrow = 3,            
  ncol = 3,            
  byrow = TRUE         
)
cat("Before deleting the 2nd column\n")
print(A)
 
# 2nd-row deletion
A = A[, -2]
 
cat("After deleted the 2nd column\n")
print(A)
R

输出:

Before deleting the 2nd column
     [, 1] [, 2] [, 3]
[1, ]    1    2    3
[2, ]    4    5    6
[3, ]    7    8    9

After deleted the 2nd column
     [, 1] [, 2]
[1, ]    1    3
[2, ]    4    6
[3, ]    7    9
R

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册