我在模拟体积中有大量元素,我称之为RelDist
(在维度上,是一个距离的单位)。我试图确定"每单位体积数值的分布"这也是数密度。它应该与此图类似:
我知道轴是按比例缩放的日志基数10,该集的图应该肯定会下降。
在数学上,我把它设置为两个等价方程:
其中N是相对于距离的自然对数而被区分的数组中的元素的数量。它也可以通过引入另一个因子r来等效地以常规导数的形式重写。
同样地,
因此,对于不断增加的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文件
答案 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]