2017-06-15 36 views
6

我有一大組元素,我在模擬體積中稱爲RelDist(其中尺寸上,是距離的單位)。我試圖確定「單位體積的數量」的分佈,這也是數字密度。它應該類似於這個圖表:1D陣列的數密度分佈 - 2次不同嘗試

我知道該軸被縮放的日誌基數爲10,該集合的圖應該肯定會下降。 enter image description here

在數學上,我將其設置爲兩個等效方程式:

enter image description here

其中N是相對於被分化爲自然對數的距離的陣列中的元件的數目。通過引入另一個因子r,它也可以等價地重寫爲常規導數的形式。

等價,

enter image description here

因此,對於不斷增加的R,我想每計數爲r的對數斌元素的N的變化。

到目前爲止,我在設置直方圖中的頻率計數時遇到困難,同時容納邊上的音量。


嘗試1

這是通過使用分牛頓/ 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] 

繪製這甚至不正確顯示如第一曲線圖I中,並將其貼合分佈僅當我選擇箱號與我的輸入數組形狀相同時才起作用。包數應該是任意的,如果不是這樣?


嘗試2

這是通過使用等效分牛頓/ 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數的變化,然後增加至20的距離值R,計數的改變,增加對值爲30,計數變化等等。


這裏是我的陣列的一個txt文件,如果你有興趣在重新創建它

https://www.dropbox.com/s/g40gp88k2p6pp6y/RelDist.txt?dl=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]