gpt4 book ai didi

r - 如何检查矩阵中的每个值是否在 R 中其他两个矩阵中的相应值之间?

转载 作者:行者123 更新时间:2023-12-05 00:48:07 25 4
gpt4 key购买 nike

我有一个矩阵,我想将它与其他两个矩阵进行比较,以查看矩阵中的每个条目是否包含在其他两个矩阵的值内或值之外。例如,如果我的矩阵是:

> M
[,1] [,2] [,3]
[1,] -0.1278982 0.4600544 1.3271033
[2,] -0.1079272 1.2196851 -0.5240536
[3,] 0.9548449 -0.9979668 -0.6636296

我的另外两个矩阵是 L 和 U:
> L 
[,1] [,2] [,3]
[1,] -0.49416022 1.0992247 -1.2834469
[2,] 0.35491793 0.2460946 1.1411529
[3,] 0.01755317 0.2469062 0.2843848


> U
[,1] [,2] [,3]
[1,] -0.84996737 1.0036554 -0.04747612
[2,] 0.35396050 -0.4612527 -1.47341334
[3,] -0.07716839 -1.5921625 1.62187501

我想取 M 的每个条目并进行比较,看看它是否包含在 L 和 U 的相应条目所构成的范围内。

例如,对于 M[1,1],它在 -0.49416022 和 -0.84996737 的范围之外,所以我会给这个比较赋值 0。另一方面,对于 M[2,3],这个值是 -0.5240536,因此介于 1.1411529 和 -1.47341334 之间,因此此比较的值为 0。

最终,我想获得一个全部为 0 和 1 的矩阵,指示 M 中的条目是否包含在 L 和 U 中的相应值中。例如,如果我们称这个矩阵为 M_comparisons,则:
> M_comparisons
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 1
[3,] 0 1 0

有没有人知道如何在非常快的计算时间内为大型矩阵做到这一点?谢谢!

最佳答案

就这么简单:

(M > U & M < L)*1

# [,1] [,2] [,3]
#[1,] 0 0 0
#[2,] 0 0 1
#[3,] 0 1 0

或者,正如 Rui Barradas 所建议的那样(稍微快一点):
as.integer(M > U & M < L)

基准
library(microbenchmark)

microbenchmark(
(M > U & M < L)*1,
as.integer(M > U & M < L)
)

#Unit: microseconds
# expr min lq mean median uq max neval
# (M > U & M < L) * 1 1.278 1.469 2.15965 1.640 1.8000 38.981 100
# as.integer(M > U & M < L) 1.042 1.212 1.59757 1.384 1.5375 12.008 100

样本数据
M <- t(matrix(c(-0.1278982, 0.4600544, 1.3271033, 
-0.1079272, 1.2196851, -0.5240536,
0.9548449, -0.9979668, -0.6636296), nrow = 3))
L <- t(matrix(c(-0.49416022, 1.0992247, -1.2834469,
0.35491793, 0.2460946, 1.1411529,
0.01755317, 0.2469062, 0.284384), nrow = 3))
U <- t(matrix(c(-0.84996737, 1.0036554, -0.04747612,
0.35396050, -0.4612527, -1.47341334,
-0.07716839, -1.5921625, 1.6218750), nrow = 3))

关于r - 如何检查矩阵中的每个值是否在 R 中其他两个矩阵中的相应值之间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50314792/

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