1D阵列的数密度分布 - 2次不同的尝试

时间:2017-06-15 08:02:44

标签: python arrays distribution derivative

我在模拟体积中有大量元素,我称之为RelDist(在维度上,是一个距离的单位)。我试图确定"每单位体积数值的分布"这也是数密度。它应该与此图类似:

我知道轴是按比例缩放的日志基数10,该集的图应该肯定会下降。 enter image description here

在数学上,我把它设置为两个等价方程:

enter image description here

其中N是相对于距离的自然对数而被区分的数组中的元素的数量。它也可以通过引入另一个因子r来等效地以常规导数的形式重写。

同样地,

enter image description here

因此,对于不断增加的r,我想计算r的每个对数bin的元素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

稍微容易些,但是不包括音量项,我得到一种直方图分布,这至少是一个开始。

通过这种尝试,如何在数组中包含卷项?

实施例

从10的距离R值开始,计算相对于R的数量的变化,然后增加到距离值R为20,计算变化,增加到30的值,计算变化,等等等等。

如果您有兴趣重新创建它,那么这是我的数组的txt文件

https://www.dropbox.com/s/g40gp88k2p6pp6y/RelDist.txt?dl=0

1 个答案:

答案 0 :(得分:0)

由于没有人能够帮助回答,我会提供我的结果,以防有人想将它用于将来使用:

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]