我正在尝试从Julia的两个间隔中获取数字。问题如下 我正在尝试创建同心球,我需要生成尺寸等于15的向量,并用从每个圆中提取的数字填充。代码是:
rmax = 5
ra = fill(0.0,1,rmax)
for i=1:rmax-1
ra[:,i].=rad/i
ra[:,rmax].= 0
end
for i=1:3
ptset = Any[]
for j=1:200
yt= 0
yt= rand(Truncated(Normal(0, 1), -ra[i], ra[i] ))
if -ra[(i+1)] < yt <= -ra[i] || ra[(i+1)] <= yt < ra[i]
push!(ptset,yt)
if length(ptset) == 15
break
end
end
end
end
在这里,我正在尝试生成每个球体内部具有统一随机数的球体;在这种情况下,yt
只是球体内数字构造的一部分。
我想在半径为r0
(在这种情况下为ra[:,4]
)的球体内生成点,然后将点从第一个球的边缘分布到半径为{{1}的第二个球}(此处为r1
)等等。
为此,我尝试采用满足两个条件之一的元素ra[:,3]
或-ra[(i+1)] < yt <= -ra[i]
,即我想生成一个带有正数和负数的向量。我使用了运算符 ra[(i+1)] <= yt < ra[i]
,但它似乎只发挥了积极作用。我是朱莉娅(Julia)的新手,我不确定如何从间隔的两个部分提取元素。有人在如何做上有成功吗?预先感谢
答案 0 :(得分:1)
我希望我能正确理解你。首先,我们需要能够从半径为N
和r0
的{{1}}维壳中进行均匀采样:
r1
(有关钩入using Random
using LinearAlgebra: normalize
struct Shell{N}
r0::Float64
r1::Float64
end
Base.eltype(::Type{<:Shell}) = Vector{Float64}
function Random.rand(rng::Random.AbstractRNG, d::Random.SamplerTrivial{Shell{N}}) where {N}
shell = d[]
Δ = shell.r1 - shell.r0
θ = normalize(randn(N)) # uniformly distributed N-dimensional direction of length 1
r = shell.r0 .* θ # scale to a point on the interior of the shell
return r .+ Δ .* θ .* .√rand(N) # add a uniformly random segment between r0 and r1
end
的更多信息,请参见here。您可以同样地实现一个新的Random
,但这并不是必须的。)
最重要的是,截断的法线不会导致均匀的分布,但是也不会向正确的方向添加均匀的缩放比例:请参见here,了解为什么平方根是必需的(我希望我做对了;您应该再次检查数学。)
然后我们可以创建一个带有嵌套半径的壳样本序列:
Distribution
(我不太确定这部分,但是重点应该很清楚。)