r - 生成多维数据

标签 r multidimensional-array shapes

R 是否有用于在多维空间中生成随机数的包?例如,假设我想在长方体或球体内生成 1000 个点。

最佳答案

我有一些用于超立方体和 n 球体选择的函数,它们生成具有笛卡尔坐标的数据帧,并保证通过超立方体或 n 球体的任意维度的均匀分布:

GenerateCubiclePoints <- function(nrPoints,nrDim,center=rep(0,nrDim),l=1){

    x <-  matrix(runif(nrPoints*nrDim,-1,1),ncol=nrDim)
    x <-  as.data.frame(
            t(apply(x*(l/2),1,'+',center))
          )
    names(x) <- make.names(seq_len(nrDim))
    x
}

位于 nrDim 的立方体/超立方体中带有 center 的尺寸和 l一侧的长度。

对于具有 nrDim 的 n 球体维度,你可以做类似的事情,其中​​ r是半径:
GenerateSpherePoints <- function(nrPoints,nrDim,center=rep(0,nrDim),r=1){
    #generate the polar coordinates!
    x <-  matrix(runif(nrPoints*nrDim,-pi,pi),ncol=nrDim)
    x[,nrDim] <- x[,nrDim]/2
    #recalculate them to cartesians
    sin.x <- sin(x)
    cos.x <- cos(x)
    cos.x[,nrDim] <- 1  # see the formula for n.spheres

    y <- sapply(1:nrDim, function(i){
        if(i==1){
          cos.x[,1]
        } else {
          cos.x[,i]*apply(sin.x[,1:(i-1),drop=F],1,prod)
        }
    })*sqrt(runif(nrPoints,0,r^2))

    y <-  as.data.frame(
            t(apply(y,1,'+',center))
          )

    names(y) <- make.names(seq_len(nrDim))
    y
}

在二维中,这些给出:

enter image description here

从代码:
 T1 <- GenerateCubiclePoints(10000,2,c(4,3),5)
 T2 <- GenerateSpherePoints(10000,2,c(-5,3),2)
 op <- par(mfrow=c(1,2))
 plot(T1)
 plot(T2)
 par(op)

关于r - 生成多维数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5016806/

相关文章:

r - R 中浮点精度的极端数值

iOS - 查找黑色曲线包围的白色像素/区域并创建路径

math - 是否有一种高性能/数学方法来查找旋转矩形重叠的网格上的哪些图 block ?

r - 除了第 2 列的 NA 值外,如何用第 2 列覆盖第 1 列的值?

R 数据帧错误 - 替换有 1 行,数据有 0

r - 将数据框列提供给 xyplot 面板函数

multidimensional-array - 是否有一个 Rust ndarray 等价于切片上的 numpy 算术?

python - 返回非平面索引的 numpy 数组的 Argmax

ruby - 根据索引在Ruby中将数组拆分为多个数组

java - 根据用户输入打印菱形图案