r - 同时将矩阵的每个元素应用于 R 中的函数
问题描述
我模拟了三个矩阵,希望实现一个功能。
很难解释这个函数,但我认为 FOR LOOP 的以下代码很好,很容易解释我想做的事情。
A=matrix(1:10000,100,100)
B=matrix(2:10001,100,100)
C=matrix(3:10002,100,100)
for (i in 1:100) {
for (j in 1:100) {
print(min(C[B>A[i,j]]))
}
}
但是,实际上每个的矩阵会大得多,例如 1000 * 1000,导致 FOR LOOP 消耗大量时间。我在二维中尝试了 apply(),但根据 system.time(),它根本没有改进。
apply(A, 1:2, function(x) print(min(C[B>x])))
我想知道是否有任何方法可以优化此功能以使其更快,或者简而言之,同时使用矩阵 A 的每个元素。
非常感谢先进!
解决方案
为了使您的示例易于管理和理解,我减少了矩阵的维度。
A=matrix(1:10,2,5)
B=matrix(2:11,2,5)
C=matrix(3:12,2,5)
运行你的函数给出:
for (i in 1:2) {
for (j in 1:5) {
print(min(C[B>A[i,j]]))
}
}
#[1] 3
#[1] 5
#[1] 7
#[1] 9
#[1] 11
#[1] 4
#[1] 6
#[1] 8
#[1] 10
#[1] 12
我们可以sapply
在 的每个元素上对此进行测试A
,然后如果需要,将其转换为与 的维数相同的矩阵A
。
out <- sapply(A, function(x) min(C[B > x]))
dim(out) <- dim(A)
out
# [,1] [,2] [,3] [,4] [,5]
#[1,] 3 5 7 9 11
#[2,] 4 6 8 10 12
推荐阅读
- ios - 在没有 API 的情况下快速显示 Web 内容
- ios - 如何在 swift 4 中从图像选择器获取照片本地 url
- javascript - 将文本框中的数字限制为 2 位(小于 100)
- php - 是否可以从其他服务器调用函数?
- javascript - 为什么调用去抖函数会抛出“不是函数”错误?
- javascript - 我想在数组中找到具有给定总和的子数组#。但是代码不能按我的意愿工作
- vba - 寻找 OpenDatabase() 的解释
- sql - 如何获取其中包含空格的列值?
- haskell - 为什么在使用 csv-conduit 时有时会得到“没有使用 `intoCSV` 产生的 CSV 文本实例”?
- ios - Office 无法加载仅适用于 IOS 的 Outlook Web 插件