r语言 - 将所有列的给定矩阵中每个"path"的值相乘



给出一个矩阵的例子:

<表类> 指数 1 2 3 4 5 6 7 8 9 10 tbody><<tr>10.10.10.10.20.20.20.70.70.40.720.60.60.60.10.10.10.10.10.50.130.30.30.30.70.70.70.20.20.10.2

为了使每个排列,我让您的数据为dummy,使用expand.grid

grid <- expand.grid(rep(list(1:3), 10))

由于grid非常大,我将使用grid的前五个

grid <- grid[c(1:5),]

让我们定义一个函数来提取dummy的网格行号(?)值。

func <- function(df, idx) {
vec <- c()
for (i in 1:length(idx)){
vec[i] <- df[as.numeric(idx[i]),i]
}
vec
}

最后,得到这些值的乘法,如

apply(grid, 1, function(x) prod(func(dummy, x)))
1           2           3           4           5 
1.09760e-06 6.58560e-06 3.29280e-06 6.58560e-06 3.95136e-05

如果你想知道最大值是多少

grid[which.max(apply(grid, 1, function(x) prod(func(dummy, x)))),]
Var1 Var2 Var3 Var4 Var5 Var6 Var7 Var8 Var9 Var10
5    2    2    1    1    1    1    1    1    1     1

这是第二条路

然而我认为这种方法能更有效地得到最大值和它的索引。因为所有的元素都是正的,

x <- apply(dummy, 2, function(x) which.max(x))
X1  X2  X3  X4  X5  X6  X7  X8  X9 X10 
2   2   2   3   3   3   1   1   2   1 
prod(func(dummy,x))
[1] 0.01270609

第二种方式的大尺寸示例

microbenchmark::microbenchmark(test ={x <- runif(250000,0,1)
y <- matrix(x, nrow = 5)
xx <- apply(y, 2, function(x) which.max(x))

prod(func(y,xx))}
)
Unit: milliseconds
expr     min       lq     mean  median       uq      max neval
test 86.0542 91.41575 111.9721 96.9571 140.7912 171.8394   100

相关内容

最新更新