一维阵列的数密度分布 - 2 次不同的尝试
Posted
技术标签:
【中文标题】一维阵列的数密度分布 - 2 次不同的尝试【英文标题】:Number density distribution of an 1D-array - 2 different attempts 【发布时间】:2017-11-17 14:52:07 【问题描述】:我在模拟体积中有大量元素,我称之为RelDist
(其中维度是距离单位)。我试图确定“每单位体积的值数”的分布,这也是数字密度。它应该类似于此图:
我知道轴是以 10 为底的对数缩放,该集合的图肯定会下降。
在数学上,我将其设置为两个等效方程:
其中 N 是数组中相对于距离的自然对数进行微分的元素数。也可以通过引入另一个因子 r 以正则导数的形式等价地重写。
同样,
因此,对于不断增加的 r,我想计算每个 r 的对数仓中元素 N 的变化。
截至目前,我无法在直方图中设置频率计数,同时在旁边容纳音量。
尝试 1
这是使用 dN/dlnr/体积方程
def n(dist, numbins):
logdist= np.log(dist)
hist, r_array = np.histogram(logdist, numbins)
dlogR = r_array[1]-r_array[0]
x_array = r_array[1:] - dlogR/2
## I am condifent the above part of this code is correct.
## The succeeding portion does not work.
dR = r_array[1:] - r_array[0:numbins]
dN_dlogR = hist * x_array/dR
volume = 4*np.pi*dist*dist*dist
## The included volume is incorrect
return [x_array, dN_dlogR/volume]
绘制它甚至不能正确显示像我在上面发布的第一个图那样的分布,并且它仅在我选择 bin 编号与我的输入数组的形状相同时才有效。包子号应该是任意的吧?
尝试 2
这是使用等效的 dN/dr/体积方程。
numbins = np.linspace(min(RelDist),max(RelDist), 100)
hist, r_array = np.histogram(RelDist, numbins)
volume = 4*np.float(1000**2)
dR = r_array[1]-r_array[0]
x_array = r_array[1:] - dR/2
y = hist/dR
稍微简单一点,但不包括体积项,我得到一种直方图分布,这至少是一个开始。
通过这种尝试,如何将音量项包含在数组中?
示例
从距离 R 值 10 开始,计算相对于 R 的数字变化,然后增加到 20 的距离值 R,计算变化,增加到 30 的值,计算变化,等等以此类推。
如果您有兴趣重新创建它,这是我的数组的 txt 文件
https://www.dropbox.com/s/g40gp88k2p6pp6y/RelDist.txt?dl=0
【问题讨论】:
【参考方案1】:由于没有人能够帮助回答,我将提供我的结果以防有人想使用它以备将来使用:
def n_ln(dist, numbins):
log_dist = np.log10(dist)
bins = np.linspace(min(log_dist),max(log_dist), numbins)
hist, r_array = np.histogram(log_dist, bins)
dR = r_array[1]-r_array[0]
x_array = r_array[1:] - dR/2
volume = [4.*np.pi*i**3. for i in 10**x_array[:] ]
return [10**x_array, hist/dR/volume]
【讨论】:
以上是关于一维阵列的数密度分布 - 2 次不同的尝试的主要内容,如果未能解决你的问题,请参考以下文章