【发布时间】:2015-09-21 20:22:47
【问题描述】:
这个问题更多的是关于 apply 函数中的 MARGIN 参数。假设我想将下面的矩阵乘以下面的向量,这样我就可以将第一个矩阵元素乘以第一个向量元素,然后再乘以第二个,以此类推。我使用以下代码:
matrix <- matrix(1:10)
vector <- c(10:19)
t(apply(matrix,2,'*',vector))
返回一个非常干净的结果:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 10 22 36 52 70 90 112 136 162 190
但是如果我改变 MARGIN = 2,我会得到这个结果:
matrix <- matrix(1:10)
vector <- c(10:19)
t(apply(matrix,1,'*',vector))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 10 11 12 13 14 15 16 17 18 19
[2,] 20 22 24 26 28 30 32 34 36 38
[3,] 30 33 36 39 42 45 48 51 54 57
[4,] 40 44 48 52 56 60 64 68 72 76
[5,] 50 55 60 65 70 75 80 85 90 95
[6,] 60 66 72 78 84 90 96 102 108 114
[7,] 70 77 84 91 98 105 112 119 126 133
[8,] 80 88 96 104 112 120 128 136 144 152
[9,] 90 99 108 117 126 135 144 153 162 171
[10,] 100 110 120 130 140 150 160 170 180 190
我假设如果 MARGIN = 1,第一个矩阵行将乘以每个向量元素,然后是第二个矩阵行,等等,而 MARGIN = 2 只是将第一个矩阵行乘以第一个向量元素?
谁能给我解释一下具体有什么区别?
【问题讨论】:
-
首先:为什么是
apply?由于矢量化,您只需t(matrix * vector)即可实现相同目的。 -
没有真正的理由,我只是不确定我还能怎么问这个问题。我想我可以问“MARGIN = 1 和 2 有什么区别,但我总是喜欢例子。
-
我已经发布了一个解决方案,希望它清楚。
标签: r margin apply multiplication