r - 从矩阵中的每个点获取最大值

标签 r matrix max

我有2个数据框

a = c(1,1,3)
b = c(7,2,1)
c = c(2,4,2)

d1 = cbind(a,b,c)

d = c(2,1,6)
e = c(1,4,2)
f = c(4,8,4)

d2 = cbind(d,e,f)

如何轻松获取每个点的最大值数据框

_fun(d1,d2)

     a b c
[1,] 2 7 4
[2,] 1 4 8
[3,] 6 2 4

我可以使用循环来完成它,但是对于大数据帧来说它非常慢。

谢谢!

最佳答案

我们可以将数据集保存在 list 中,并使用 do.callf 作为 pmax

do.call(pmax, list(d1, d2))
#     a b c
#[1,] 2 7 4
#[2,] 1 4 8
#[3,] 6 2 4

或者直接使用pmax

pmax(d1, d2)

编辑:基于@nicola 的评论。

使用 pmax.int 可能会更快,但转换回 matrix 可能会更慢。

matrix(pmax.int(d1, d2), dim(d1))

基准

set.seed(24)
m1 <- matrix(sample(0:9, 5000*5000, replace=TRUE), ncol=5000)
set.seed(48)
m2 <- matrix(sample(0:9, 5000*5000, replace=TRUE), ncol=5000)
akrun1 <- function() pmax(m1, m2)
akrun2 <- function() matrix(pmax.int(m1, m2), dim(m1))
colonel <- function() ifelse(m1 > m2, m1, m2)
system.time(akrun1())
#   user  system elapsed 
#  0.850   0.033   0.885 
system.time(akrun2())
#   user  system elapsed 
#  1.090   0.021   1.114 

system.time(colonel())
#   user  system elapsed 
#  5.049   0.336   5.395 

关于r - 从矩阵中的每个点获取最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32842844/

相关文章:

arrays - 将矩阵折叠成列

c++ - 通过用户输入在 C++ 中查找最大值和最小值

java - 最小和最大的输入

python - 使用 numpy 读取 csv 文件的主要内存问题

r - 更改 R 中成对图的图大小

根据值减少数据集

c++ - 如何移动 Eigen 中的矩阵?

r - 计算 R 中大矩阵的零空间

php - PDO 返回单行而 MySQL 返回多行

r - hclust 函数的聚类列表