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

Generate n artificial points in given n-dimensional space, but no point should be present in original space in R

我想在给定的 n 维 Original_space 中生成具有均匀分布的 n artificial points,但是 no artificial point 应该出现在 Original_space 中。

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

示例:

> 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

new n-artificial points应该在上面的space中生成uniformly,但是none应该和上面的space完全匹配。

这是一次尝试:

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 中没有元素出现在相应的列中,然后 return z

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