在给定的 n 维空间中生成 n 个人工点,但在 R 的原始空间中不应存在任何点



我想在给定的n维Original_space中生成均匀分布的n artificial points,但no artificial point应该存在于Original_space中。

EDIT :上面的每个row都是一个point,我们需要生成不在original space中的new rowsartificial points

例:

> Original_space = matrix(sample(runif(10,0,1), 9*100, TRUE),4,6)
> Original_space
          [,1]       [,2]       [,3]      [,4]       [,5]      [,6]
[1,] 0.9353045 0.65987073 0.12301011 0.6598707 0.01346191 0.4676935
[2,] 0.1230101 0.01346191 0.46769352 0.6598707 0.01346191 0.6660970
[3,] 0.3539783 0.66609697 0.67533240 0.6753324 0.46769352 0.9353045
[4,] 0.9076819 0.90768191 0.05189017 0.6660970 0.46769352 0.4676935

应在上述空间中uniformly生成新的n-artificial points,但不应与上述空间完全匹配。

这是一个尝试:

my_fun <- function(matrix, n){
    out <- apply(matrix, 2, function(x){
      minx = min(x)
      maxx = max(x)
      repeat{
        z <- runif(n, min = minx, max = maxx)
        b <- sum(z %in% x)
        if(b == 0){
          break}
      }
      return(z)
    }
    )
    return(out)
}

用法:

set.seed(1)
Original_space <- matrix(sample(runif(10,0,1), 9*100, TRUE),4,6)
Original_space
#output
          [,1]       [,2]       [,3]      [,4]      [,5]      [,6]
[1,] 0.5728534 0.66079779 0.90820779 0.9446753 0.2655087 0.2016819
[2,] 0.3721239 0.20168193 0.66079779 0.3721239 0.9082078 0.8983897
[3,] 0.9446753 0.66079779 0.06178627 0.5728534 0.6291140 0.2016819
[4,] 0.9082078 0.06178627 0.57285336 0.9082078 0.9082078 0.3721239
my_fun(Original_space, 5)
#output
          [,1]      [,2]       [,3]      [,4]      [,5]      [,6]
[1,] 0.7601605 0.5771100 0.78008265 0.7743456 0.7774027 0.7951922
[2,] 0.4930669 0.4834536 0.43715634 0.4042942 0.7109603 0.2648927
[3,] 0.5947576 0.3569482 0.90182360 0.3905363 0.5210135 0.4814798
[4,] 0.5799297 0.6500261 0.09738581 0.9274622 0.6986689 0.6812729
[5,] 0.7703199 0.3554926 0.64491254 0.7627202 0.7822417 0.8430472

工作原理:

参数是起始矩阵(matrix(和要生成的点数(n

对于每列apply(matrix, 2, function(x)
获取最小值和最大值minx = min(x)maxx = max(x)
重复:z <- runif(n, min = minx, max = maxx)
直到 z 中没有元素在相应的列中,然后返回z

请注意,这是一个比要求更严格的标准,因为我假设给定点没有坐标应该匹配,而您的标准是所有坐标都不应该匹配 - 如果要求这样做,您可以安全地删除重复循环,因为所有坐标匹配的机会非常渺茫。

相关内容

最新更新