首页 文章

用向量的元素划分矩阵的列[重复]

提问于
浏览
1

这个问题在这里已有答案:

我正在弄清楚如何将矩阵的第n列除以行向量的第n个元素 .

例如,让矩阵a和向量b为:

a <- matrix(1:9, byrow = TRUE,  nrow = 3)
b <- c(3:5)

[[1]]
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9

[[2]]
[1] 3 4 5

在这种情况下,我正在寻找将矩阵的第一列除以3,将第二列除以4而将第四列除以5的代码 .

我尝试过使用apply函数但没有成功

c <- apply(a, 2, function(x) x / b)

是否有任何代码可以使用apply执行此操作,最好不使用循环?

3 回答

  • 0

    您可以使用 sweep

    #same as apply the second argument needs to be 1 for row or 2 for column
    sweep(a, 2, b, FUN = '/')
    #          [,1] [,2] [,3]
    #[1,] 0.3333333 0.50  0.6
    #[2,] 1.3333333 1.25  1.2
    #[3,] 2.3333333 2.00  1.8
    
  • 0

    另一种选择是 mapply ,即

    mapply(`/`, data.frame(a), b)
    

    这使

    X1 X2 X3
    [1,] 0.3333333 0.50 0.6
    [2,] 1.3333333 1.25 1.2
    [3,] 2.3333333 2.00 1.8

  • 1

    您可以对矩阵进行转置,除以并再次转置结果 .

    t(t(a)/b)
    #          [,1] [,2] [,3]
    #[1,] 0.3333333 0.50  0.6
    #[2,] 1.3333333 1.25  1.2
    #[3,] 2.3333333 2.00  1.8
    

相关问题