我正在尝试使用足够快的解决方案(并避免循环)来解决以下问题:我有一个矩阵nxn(方形但不一定)和一个向量或大小nx1 . 我想将矩阵的每一行除以向量中的倒数元素,如下所示:
第一行应除以第一个向量元素,
第二行应除以第二个向量元素,
.
第N行应除以第n个向量元素 .
stats = matrix(1.2,10000,10000)
对于矢量来说是相同的,它的大小为10,000,并初始化为某些值 .
这就是 sweep 功能的用途
sweep
mm <- matrix(rep(1:5, 7), ncol=7) d <- 1:5 sweep(mm, 1, d, "/")
在这里,我们告诉扫描,对于 mm 的每一行(对于MARGIN 1 =行,2 =列),从 d 中划分出相应的值 .
mm
d
你能用矢量划分矩阵吗?
m <- matrix(1:20, nrow=5) #[,1] [,2] [,3] [,4] #[1,] 1 6 11 16 #[2,] 2 7 12 17 #[3,] 3 8 13 18 #[4,] 4 9 14 19 #[5,] 5 10 15 20 v <- 5:1 #[1] 5 4 3 2 1 #Divide matrix row 1 by 5 (v[1]) #Divide matrix row 2 by 4 (v[2]) m/v #[,1] [,2] [,3] [,4] #[1,] 0.2 1.200000 2.200000 3.20 #[2,] 0.5 1.750000 3.000000 4.25 #[3,] 1.0 2.666667 4.333333 6.00 #[4,] 2.0 4.500000 7.000000 9.50 #[5,] 5.0 10.000000 15.000000 20.00
(旁注:按列分割,你必须转置矩阵)
2 回答
这就是
sweep
功能的用途在这里,我们告诉扫描,对于
mm
的每一行(对于MARGIN 1 =行,2 =列),从d
中划分出相应的值 .你能用矢量划分矩阵吗?
(旁注:按列分割,你必须转置矩阵)