मौजूदा जवाब सही विचार है, लेकिन मुझे शक है आप size
में सभी मान योग करने के लिए के रूप में nicogen किया है चाहता हूँ।
मुझे लगता है कि आप हिस्टोग्राम में आकार का प्रदर्शन करने के लिए अपेक्षाकृत बड़े size
चुन रहे थे और इसके बजाय आप प्रत्येक श्रेणी से एक मान जोड़ना चाहते हैं। उदाहरण के लिए, हम प्रत्येक गतिविधि के एक उदाहरण की गणना करना चाहते हैं, 1000 उदाहरण नहीं।
पहला कोड ब्लॉक मानता है कि आप जानते हैं कि आपका फ़ंक्शन एक योग है और इसलिए योग की गणना करने के लिए तेज़ संख्यात्मक संक्षेप का उपयोग कर सकते हैं।
import numpy as np
import matplotlib.pyplot as plt
mc_trials = 10000
gym = np.random.choice([30, 30, 35, 35, 35, 35,
35, 35, 40, 40, 40, 45, 45], mc_trials)
brush_my_teeth = np.random.choice([2], mc_trials)
argument = np.random.choice([0, 45], size=mc_trials, p=[0.9, 0.1])
dinner = np.random.normal(15, 5/3, size=mc_trials)
work = np.random.normal(45, 15/3, size=mc_trials)
shower = np.random.triangular(left=5, mode=9, right=10, size=mc_trials)
col_per_trial = np.vstack([gym, brush_my_teeth, argument,
dinner, work, shower])
mc_function_trials = np.sum(col_per_trial,axis=0)
plt.figure()
plt.hist(mc_function_trials,30)
plt.xlim([0,200])
plt.show()
आप अपने कार्य को नहीं जानते हैं, या आसानी से फिर से पात्र चयन नहीं कर सकते हैं एक numpy तत्व के लिहाज से मैट्रिक्स आपरेशन के रूप में है, तो आप अभी भी बहुत तरह पाश कर सकते हैं के माध्यम से:
def total_time(variables):
return np.sum(variables)
mc_function_trials = [total_time(col) for col in col_per_trial.T]
आप "संभाव्यता वितरण" प्राप्त करने के बारे में पूछते हैं। जैसा कि हमने उपरोक्त किया है, हिस्टोग्राम प्राप्त करना आपके लिए काफी कुछ नहीं करता है। यह आपको एक दृश्य प्रतिनिधित्व देता है, लेकिन वितरण समारोह नहीं। फ़ंक्शन प्राप्त करने के लिए, हमें कर्नेल घनत्व अनुमान लगाने की आवश्यकता है। scikit-learn में एक डिब्बाबंद function and example है जो यह करता है।
from sklearn.neighbors import KernelDensity
mc_function_trials = np.array(mc_function_trials)
kde = (KernelDensity(kernel='gaussian', bandwidth=2)
.fit(mc_function_trials[:, np.newaxis]))
density_function = lambda x: np.exp(kde.score_samples(x))
time_values = np.arange(200)[:, np.newaxis]
plt.plot(time_values, density_function(time_values))
अब आप योग कम से कम 100 जा रहा है की संभावना की गणना कर सकते हैं, उदाहरण के लिए:
import scipy.integrate as integrate
probability, accuracy = integrate.quad(density_function, 0, 100)
print(probability)
# prints 0.15809
क्या आपने [pymc] (https://pymc-devs.github.io/pymc/tutorial.html) पैकेज को आजमाया है? – elphz