मैं वर्तमान में एक एल्गोरिदम पर काम कर रहा हूं जहां यह एक अल्ट्रासोनिक सेंसर (दूरी सेंसर) से मूल्य लेता है जो पिछले 10 लिए गए मूल्य के औसत को लगातार पढ़ रहा है और गणना कर रहा है। समस्या यह है कि अल्ट्रासोनिक सेंसर में यादृच्छिक स्पाइक्स होंगे जो औसत रीडिंग को महत्वपूर्ण रूप से बंद कर देंगे

example of readings

19.42
19.43
130.50
19.46
19.44
19.42
144.52
19.4
145.90
19.37
[Average Distance:23] #just a example not actual results

तो अब मैं सोच रहा हूं कि बहुमत पर उच्च मूल्य आधार की अवहेलना करने का कोई तरीका है, कहें कि यदि सूची में अधिकांश छोटे मूल्य हैं तो यह उच्च मूल्य को अनदेखा कर देगा और इसके विपरीत, यदि अधिकांश उच्च मूल्य छोटे मूल्यों को अनदेखा करते हैं।

example of desired result

19.42
19.43
130.50  
19.46
19.44
19.42
144.52
19.4
145.90
19.37
[Average Distance:19]  #ignored spiked values are the majority of numbers are 19

अगर मुझे और स्पष्टीकरण/उदाहरणों की आवश्यकता है तो मुझे बताएं, अग्रिम धन्यवाद।

0
yong jie 10 नवम्बर 2020, 10:58

1 उत्तर

सबसे बढ़िया उत्तर

आप numpy.median का उपयोग कर सकते हैं:

import numpy as np
vals = np.array([19.42
,19.43
,130.50  
,19.46
,19.44
,19.42
,144.52
,19.4
,145.90
,19.37])
np.median(vals)

19.435 का उत्पादन करता है। माध्यिका एक ऐसा बिंदु है कि आधे अवलोकन ऊपर हैं और आधे नीचे हैं, देखें माध्यिका

1
piterbarg 10 नवम्बर 2020, 08:13