R语言 用矢量元素除掉矩阵的每一行

R语言 用矢量元素除掉矩阵的每一行

在这篇文章中,我们将讨论如何在R编程语言中用向量元素来划分矩阵的每一行。

方法1:使用标准除法

首先,计算矩阵的转置,以互换行和列。最初,如果矩阵的尺寸是n*m,转置将尺寸转换为m*n。矩阵的转置需要计算,因为布尔除法运算符”/”是逐列应用的,我们需要计算逐行除法。然后用转置矩阵作为一个操作数,向量作为另一个操作数,进行除法运算。然后对这个结果进行转置,以再次保持行和列的顺序。

语法

t(transpose_matrix/vector)

例子

# creating matrix 
matrix <- matrix(1:12,ncol=3)
  
print ("Original Matrix")
print (matrix)
  
# creating vector
vec <- c(1:3)
  
# transpose matrix
trans_mat <- t(matrix)
  
# computing division 
div <- t(trans_mat/vec)
  
print ("Division matrix")
print (div)

输出

[1] "Original Matrix"
    [,1] [,2] [,3]
[1,]    1    5    9
[2,]    2    6   10
[3,]    3    7   11
[4,]    4    8   12
[1] "Division matrix"
    [,1] [,2]     [,3]
[1,]    1  2.5 3.000000
[2,]    2  3.0 3.333333
[3,]    3  3.5 3.666667
[4,]    4  4.0 4.000000

方法2:使用sweep()方法

R语言中的这个方法通过扫出一个汇总统计,返回一个从输入数组得到的数组。该方法用于计算数据框在所选轴上的算术运算。对于逐行运算,选择的轴是2,操作数是数据框的行。结果必须存储在另一个变量中。这个操作产生的时间相当于数据框中的行数。结果列的数据类型是最大的兼容数据类型。

语法: sweep (df, axis, vec, op)

参数:

  • df – 数据框架
  • axis – 要按行计算,使用 axis = 1,要按列计算,使用 axis = 2
  • vec – 在数据框上应用的向量
  • op – 要应用的运算符

例子

# creating matrix 
matrix <- matrix(1:12,ncol=3)
  
print ("Original Matrix")
print (matrix)
  
# creating vector
vec <- c(1:3)
  
# computing division 
div <- sweep(matrix, 2, vec, "/")
  
print ("Division matrix")
print (div)

输出

[1] "Original Matrix"
    [,1] [,2] [,3]
[1,]    1    5    9
[2,]    2    6   10
[3,]    3    7   11
[4,]    4    8   12
[1] "Division matrix"
    [,1] [,2]     [,3]
[1,]    1  2.5 3.000000
[2,]    2  3.0 3.333333
[3,]    3  3.5 3.666667
[4,]    4  4.0 4.000000

方法3:使用rep()方法

R中的rep(x)方法是用来复制向量x中的数值的。rep()函数复制数值,或文本,或一个向量的数值的特定次数。

语法: rep ( vec, each = )

参数:

  • vec : 其值被复制的向量。
  • each : 非负的整数。其他输入将被强制为一个整数或双数向量,并取第一个元素。

这里应用rep()方法的想法是创建一个复制的向量,并将其堆叠在一起,以创建相当于行数的副本数量。随后是对所涉及的矩阵进行除法。

例子

# creating matrix 
matrix <- matrix(1:16,ncol=2)
  
print ("Original Matrix")
print (matrix)
  
# creating vector
vec <- c(1:2)
  
# calculating rows
rows <- nrow(matrix)
  
# computing division 
div <- matrix / rep(vec, each = rows)
  
print ("Division matrix")
print (div)

输出

[1] "Original Matrix"
    [,1] [,2]
[1,]    1    9
[2,]    2   10
[3,]    3   11
[4,]    4   12
[5,]    5   13
[6,]    6   14
[7,]    7   15
[8,]    8   16
[1] "Division matrix"
    [,1] [,2]
[1,]    1  4.5
[2,]    2  5.0
[3,]    3  5.5
[4,]    4  6.0
[5,]    5  6.5
[6,]    6  7.0
[7,]    7  7.5
[8,]    8  8.0

方法4:使用apply()方法

apply()方法是一种集合方法,用于在整个指定对象上应用转换。 apply()方法将数据框或矩阵作为输入,并以矢量、列表或数组的形式给出输出。

语法: apply(matrix , axis , FUN)

参数:

  • matrix: 一个数组或矩阵
  • axis: 应用转换的轴的指标
    • axis =1: 逐行操作
    • axis =2 :列式操作
    • axis=c(1,2) : 对行和列进行操作
  • FUN: 告诉你要应用哪个函数。

在应用apply()方法后,必须计算结果的转置以保持顺序,因为apply()方法返回转置后的矩阵。

例子

# creating matrix 
matrix <- matrix(1:16,ncol=2)
  
print ("Original Matrix")
print (matrix)
  
# creating vector
vec <- c(1:2)
  
# calculating rows
rows <- nrow(matrix)
  
# computing division 
div <- t(apply(matrix, 1, "/", vec))
  
print ("Division matrix")
print (div)

输出

[1] "Original Matrix"
    [,1] [,2]
[1,]    1    9
[2,]    2   10
[3,]    3   11
[4,]    4   12
[5,]    5   13
[6,]    6   14
[7,]    7   15
[8,]    8   16
[1] "Division matrix"
    [,1] [,2]
[1,]    1  4.5
[2,]    2  5.0
[3,]    3  5.5
[4,]    4  6.0
[5,]    5  6.5
[6,]    6  7.0
[7,]    7  7.5
[8,]    8  8.0

方法5:使用%*%运算符

%*%运算符是一种特殊的乘法运算符,为矩阵乘法而定义。 该运算符用于将矩阵与它的转置相乘。 首先,使用R中的diag()函数为指定的向量计算对角线矩阵,它以向量的逆值为参数,然后将该矩阵与原始矩阵相乘,产生除法。这消除了显式除法的需要,因为已经考虑到了逆的因素。

语法: diag( x )

参数:

x: 要作为对角线元素出现的矢量。

例子

# creating matrix 
matrix <- matrix(1:16,ncol=2)
  
print ("Original Matrix")
print (matrix)
  
# creating vector
vec <- c(1:2)
  
# calculating rows
rows <- nrow(matrix)
  
# computing division 
div <- matrix %*% diag(1 / vec)
  
print ("Division matrix")
print (div)

输出

[1] "Original Matrix"
    [,1] [,2]
[1,]    1    9
[2,]    2   10
[3,]    3   11
[4,]    4   12
[5,]    5   13
[6,]    6   14
[7,]    7   15
[8,]    8   16
[1] "Division matrix"
    [,1] [,2]
[1,]    1  4.5
[2,]    2  5.0
[3,]    3  5.5
[4,]    4  6.0
[5,]    5  6.5
[6,]    6  7.0
[7,]    7  7.5
[8,]    8  8.0

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程