gpt4 book ai didi

r - 从 R 中的一组矩阵中​​有效地找到最小单元格值

转载 作者:行者123 更新时间:2023-12-03 20:23:01 26 4
gpt4 key购买 nike

我有一个矩阵列表(大小 n*n),我需要根据我的列表创建一个新矩阵,给出每个单元格观察到的最小值。
例如,使用以下矩阵列表:

> a = list(matrix(rexp(9), 3), matrix(rexp(9), 3), matrix(rexp(9), 3))
> a
[[1]]
[,1] [,2] [,3]
[1,] 0.5220069 0.39643016 0.04255687
[2,] 0.4464044 0.66029350 0.34116609
[3,] 2.2495949 0.01705576 0.08861866

[[2]]
[,1] [,2] [,3]
[1,] 0.3823704 0.271399 0.7388449
[2,] 0.1227819 1.160775 1.2131681
[3,] 0.1914548 1.004209 0.7628437

[[3]]
[,1] [,2] [,3]
[1,] 0.2125612 0.45379057 1.5987420
[2,] 0.3242311 0.02736743 0.4372894
[3,] 0.6634098 1.15401347 0.9008529
输出应该是:
          [,1]       [,2]      [,3]
[1,] 0.2125612 0.271399 0.04255687
[2,] 0.1227819 0.02736743 0.34116609
[3,] 0.1914548 0.01705576 0.08861866
我尝试使用带有以下代码的应用循环(使用 reshape2 库中的melt和dcast):
library(reshape2)
all = melt(a)
allComps = unique(all[,c(1:2)])
allComps$min=apply(allComps, 1, function(x){
g1 = x[1]
g2 = x[2]
b = unlist(lapply(a, function(y){
return(y[g1,g2])
}))
return(b[which(b==min(b))])
})
dcast(allComps, Var1~Var2)
它有效,但在大型矩阵 (6000*6000) 上应用时需要很长时间才能运行。我正在寻找一种更快的方法来做到这一点。

最佳答案

使用 Reducepmin :

Reduce(pmin, a)

# [,1] [,2] [,3]
#[1,] 0.02915345 0.03157736 0.3142273
#[2,] 0.57661027 0.05621098 0.1452668
#[3,] 0.48021473 0.18828404 0.4787604
数据
set.seed(123)
a = list(matrix(rexp(9), 3), matrix(rexp(9), 3), matrix(rexp(9), 3))

关于r - 从 R 中的一组矩阵中​​有效地找到最小单元格值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67401051/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com