में संभाव्यता घनत्व कार्यों का तेज़ संकल्प मान लीजिए कि सामान्य संभाव्यता घनत्व कार्यों की सामान्य संख्या के संकल्प की गणना की जानी चाहिए।पायथन
import numpy as np
pdfs = np.array([[0.6,0.3,0.1],[0.5,0.4,0.1],[0.3,0.7,0.0],[1.0,0.0,0.0]])
घुमाव के इस तरह पाया जा सकता है: उदाहरण के लिए नीचे दिए गए चार वितरण जो मूल्यों पर ले निर्दिष्ट संभावनाओं के साथ 0,1,2 हैं
pdf = pdfs[0]
for i in range(1,pdfs.shape[0]):
pdf = np.convolve(pdfs[i], pdf)
0 देखकर की संभावनाओं, 1, ..., 8 तब तक
array([ 0.09 , 0.327, 0.342, 0.182, 0.052, 0.007, 0. , 0. , 0. ])
दिया जाता है इस भाग मेरी कोड में अड़चन है और ऐसा लगता है इस कार्य को करने के लिए उपलब्ध vectorize कुछ किया जाना चाहिए। क्या किसी को इसे तेजी से बनाने के लिए कोई सुझाव है?
वैकल्पिक रूप सेहै, जहां आप
pdf1 = np.array([[0.6,0.3,0.1],[0.5,0.4,0.1]])
pdf2 = np.array([[0.3,0.7,0.0],[1.0,0.0,0.0]])
convolve(pd1,pd2)
का उपयोग करें और जोड़ो में convolutions
array([[ 0.18, 0.51, 0.24, 0.07, 0. ],
[ 0.5, 0.4, 0.1, 0. , 0. ]])
मिल भी काफी मदद मिलेगी सकता है एक समाधान।
numpy दस्तावेज़ों के अनुसार, 'np.convolve' के तर्क केवल 1-आयामी हो सकते हैं। तो मुझे लगता है, यहाँ vectorize करने के लिए बहुत कुछ नहीं है। लेकिन हो सकता है कि एक अलग दृढ़ संकल्प का उपयोग करने के लायक हो जैसे कि सिसी के एफएफटी आधारित एक? http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.fftconvolve।एचटीएमएल – SmCaterpillar
@ एसएम कैटरपिलर मैंने थोड़ी देर के साथ खेला लेकिन संकल्प के बारे में मेरा ज्ञान यह समझने के लिए बहुत सीमित है कि वहां क्या हो रहा है। यहां संस्करण मैं समझता हूं, लेकिन मुझे कोई संकेत नहीं है कि एफएफटी संस्करण के लिए वजन कैसे निर्दिष्ट किया जाए। – Forzaa
वजन से आपका क्या मतलब है? मैंने दोनों की कोशिश की और दोनों संकल्प आपके प्रश्न के लिए एक ही परिणाम देते हैं। हालांकि, एफएफटी एक बहुत धीमी थी (ओवरहेड के कारण, आपकी खिलौना समस्या बहुत छोटी है, शायद जब पीडीएफ में अधिक मूल्य होते हैं, तो आपको वास्तव में गति में वृद्धि मिलती है)। – SmCaterpillar