2017-06-15 11 views
6

मेरे पास एक बड़ी मात्रा में तत्व हैं जिन्हें मैं RelDist (जिसमें आयाम, दूरी की एक इकाई है) को एक अनुरूपित मात्रा में कॉल करता है। मैं "प्रति यूनिट वॉल्यूम के मूल्यों की संख्या" के वितरण को निर्धारित करने का प्रयास कर रहा हूं जो कि संख्या घनत्व भी है। यह इस आरेख के समान होना चाहिए:1 डी-सरणी की संख्या घनत्व वितरण - 2 अलग-अलग प्रयास

मुझे पता है कि अक्ष को लॉग बेस 10 स्केल किया गया है, सेट की साजिश निश्चित रूप से बंद होनी चाहिए।

enter image description here

जहां N सरणी में तत्वों की संख्या दूरी के प्राकृतिक लॉग के संबंध में अलग-अलग किया जा रहा है: enter image description here

गणित के अनुसार, मैं इसे दो बराबर समीकरणों के रूप में स्थापना की। इसे आर के एक अन्य कारक को पेश करके नियमित रूप से व्युत्पन्न के रूप में समान रूप से फिर से लिखा जा सकता है।

तुल्य,

enter image description here

तो बढ़ती आर के लिए, मैं आर के लघुगणक बिन प्रति तत्वों के एन में परिवर्तन की गणना करना चाहते।

अभी तक, मुझे इसके साथ वॉल्यूम को समायोजित करते समय हिस्टोग्राम में आवृत्ति गिनती स्थापित करने में समस्या है।


प्रयास 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] 

साजिश यह और भी ठीक से पहले साजिश मैं ऊपर और इसे पोस्ट की तरह एक वितरण प्रदर्शित नहीं करता है केवल तब काम करता है जब मैं बिन संख्या को अपने इनपुट सरणी के समान आकार के रूप में चुनता हूं। बुन संख्या मनमाने ढंग से होनी चाहिए, है ना?


प्रयास 2

यह बराबर डीएन/डॉ/मात्रा समीकरण का उपयोग कर रहा है।

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 की तरह कुछ की दूरी आर मूल्य पर प्रारंभ, आर के संबंध में संख्या में परिवर्तन में गिना जाता है, तो 20 की दूरी मूल्य आर बढ़ रही हैं, तो परिवर्तन में गिना जाता है, के लिए वृद्धि 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] 
संबंधित मुद्दे