在给定的 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 rows
或artificial 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
请注意,这是一个比要求更严格的标准,因为我假设没有坐标应该与给定点匹配,而您的标准是所有坐标都不应匹配 - 如果有要求,您可以安全地删除重复循环因为所有坐标匹配的可能性很小。
我想在给定的 n 维 Original_space
中生成具有均匀分布的 n artificial points
,但是 no artificial point
应该出现在 Original_space
中。
EDIT
:
上面每个row
都是一个point
,我们需要生成new rows
或artificial 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
请注意,这是一个比要求更严格的标准,因为我假设没有坐标应该与给定点匹配,而您的标准是所有坐标都不应匹配 - 如果有要求,您可以安全地删除重复循环因为所有坐标匹配的可能性很小。