gpt4 book ai didi

r 检查行元素是否在边界内

转载 作者:行者123 更新时间:2023-12-02 03:40:08 25 4
gpt4 key购买 nike

我正在处理大量组合。我想要一种方法来消除其中的一部分,以便消除元素靠在一起的所有组合(其中 close 由我设置)。 (注意,它可能需要一两秒,它相当大)。

举个例子:

library(gtools)

support<-matrix(seq(0,1,by=0.1), ncol=1)
support.n<-as.matrix(permutations(length(support), 3,support))

但现在我想消除任何 2 个组合“接近”的所有行(例如,彼此相差 +/-0.2 以内,包括在内)。也就是说,我如何转换:

...
[964,] 1.0 0.7 0.0
[965,] 1.0 0.7 0.1
[966,] 1.0 0.7 0.2
[967,] 1.0 0.7 0.3
[968,] 1.0 0.7 0.4
[969,] 1.0 0.7 0.5
[970,] 1.0 0.7 0.6
[971,] 1.0 0.7 0.8
[972,] 1.0 0.7 0.9
[973,] 1.0 0.8 0.0
[974,] 1.0 0.8 0.1
[975,] 1.0 0.8 0.2
[976,] 1.0 0.8 0.3
[977,] 1.0 0.8 0.4
[978,] 1.0 0.8 0.5
[979,] 1.0 0.8 0.6
[980,] 1.0 0.8 0.7
[981,] 1.0 0.8 0.9
[982,] 1.0 0.9 0.0
[983,] 1.0 0.9 0.1
[984,] 1.0 0.9 0.2
[985,] 1.0 0.9 0.3
[986,] 1.0 0.9 0.4
[987,] 1.0 0.9 0.5
[988,] 1.0 0.9 0.6
[989,] 1.0 0.9 0.7
[990,] 1.0 0.9 0.8

变得更薄:

....
[964,] 1.0 0.7 0.0
[965,] 1.0 0.7 0.1
[966,] 1.0 0.7 0.2
[967,] 1.0 0.7 0.3
[968,] 1.0 0.7 0.4
[969,] 1.0 0.7 0.5

行名称不正确的地方,因为我没有计算出它们会发生什么。我一直在查看命令 any(x) 和一些各种 which() 类型的命令,但似乎无法让魔法发生。

最佳答案

我认为 codoremifa 和我在同一页面上。我们的答案使用相同的逻辑并为您的示例数据提供相同的值。这是我放在一起的:

f <- function(x, threshold = .2) {
combinations <- combn(length(x),2)
keep <- all(abs(x[combinations[1,]] - x[combinations[2,]]) > threshold)
return(keep)
}

然后应用函数f,按行创建TRUE/FALSE值的索引,以选择的适当行支持.n:

a <- support.n[apply(support.n, 1,f),]

为了确认我们的答案相同,我将 codoremifa 的答案保存为 b:

> all.equal(a,b)
[1] TRUE

对于大对象,无论是行数还是列数,您都可以通过提前计算 combn() 并简单地建立索引来消除计算每一行的开销它在每一行。然而,这个示例在我的机器上运行时间为 0.05 秒,因此不值得在这里制作更复杂的函数。

关于r 检查行元素是否在边界内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20585922/

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