runif を使用して、R でランダムな 2D ポイントのシーケンスを作成したいと考えています。それを行う良い方法は何ですか?
これは私の現在の実装です(動作しません)
getpoints <- function(n)
{
t <- 1:n;
for (i in 1:n)
{
t[i] <- runif(2,-1,1)
}
return (t)
}
runif を使用して、R でランダムな 2D ポイントのシーケンスを作成したいと考えています。それを行う良い方法は何ですか?
これは私の現在の実装です(動作しません)
getpoints <- function(n)
{
t <- 1:n;
for (i in 1:n)
{
t[i] <- runif(2,-1,1)
}
return (t)
}
n <- 200
o <- matrix(runif(2*n, min = -1, max = 1), ncol = 2)
n <- 5
cbind(runif(n,-1,1),runif(n,-1,1))
[,1] [,2]
[1,] -0.68434317 -0.7772889
[2,] -0.91200792 -0.6408075
[3,] -0.01888610 0.7350491
[4,] 0.01782097 0.9674700
[5,] -0.56707264 -0.9991566
ここにある多数の回答に追加するだけです。これは、@Arun のように、必要に応じて 2 つ以上の列を簡単に処理できます。
replicate(2, runif(100))
そろそろベンチマークの時期かもしれません。
このスレッドの概要を説明するために、まず、使用されるいくつかの方法に関連する速度を示します(したがって、どれが最適かについて独自の結論を導き出すことができます)。次に、関数の使用方法を示します。つまり、おそらくあなたがあなたの機能を意図した方法です。
n <- 1000000
> system.time(cbind(runif(n, -1, 1), runif(n, -1, 1)))
user system elapsed
0.28 0.03 0.31
> system.time(matrix(runif(2*n, min = -1, max = 1), ncol = 2))
user system elapsed
0.32 0.00 0.33
> system.time(replicate(2, runif(n, -1, 1)))
user system elapsed
0.26 0.02 0.35
関数と時間ベンチマークは次のとおりです。
getPoints <- function (N) {
pointMatrix <- matrix(1, nrow = 1000000, ncol = 2)
for (i in 1:N) {
pointMatrix[i, ] <- runif(2, -1, 1) # it needs to run for all columns
}
}
> system.time(getPoints(n))
user system elapsed
17.59 0.04 19.94
>