मैं मूविंग एवरेज फंक्शन लिख रहा हूँ जो कि क्रिस्प में फंक्शन का उपयोग करता है, जो एक के बराबर होना चाहिए (भारित चलती औसत)। जब मेरा वजन सभी के बराबर होता है (एक साधारण गणित औसत के रूप में), यह ठीक काम करता है:
data = numpy.arange(1,11)
numdays = 5
w = [1.0/numdays]*numdays
numpy.convolve(data,w,"valid")
देता है
array([ 3., 4., 5., 6., 7., 8.])
हालांकि, जब मैं एक भारित औसत का उपयोग करने की कोशिश करता हूं
w = numpy.cumsum(numpy.ones(numdays,dtype=float),axis=0); w = w/numpy.sum(w)
के बजाय (एक ही डेटा के लिए) 3.667,4.667,5.667,6.667, ... मुझे उम्मीद है, मुझे मिलता है
array([ 2.33333333, 3.33333333, 4.33333333, 5.33333333, 6.33333333,
7.33333333])
यदि मैं "वैध" ध्वज हटाता हूं, तो मैं भी नहीं देखतासही मूल्य। मैं वास्तव में WMA के साथ-साथ MA के लिए कॉन्वोल्यूशन का उपयोग करना चाहूंगा क्योंकि यह कोड क्लीनर (समान कोड, अलग-अलग वज़न) बनाता है और अन्यथा मुझे लगता है कि मुझे सभी डेटा के माध्यम से लूप करना होगा और स्लाइस लेना होगा।
इस व्यवहार के बारे में कोई विचार?
उत्तर:
उत्तर № 1 के लिए 15आप क्या चाहते हैं np.correlate
एक यकीन में दूसरा तर्क मूल रूप से उलटा होता है, ताकि आपका अपेक्षित परिणाम साथ हो np.convolve(data, w[::-1], "valid")
.