การย้าย ค่าเฉลี่ย C โปรแกรม


ฉันรู้ว่านี่เป็นไปได้ด้วยการเพิ่มตาม: แต่ฉันต้องการหลีกเลี่ยงการเพิ่ม ฉันมี googled และไม่พบตัวอย่างที่เหมาะสมหรืออ่านได้ โดยทั่วไปฉันต้องการติดตามค่าเฉลี่ยเคลื่อนที่ของสตรีมกระแสข้อมูลจำนวนจุดลอยโดยใช้ตัวเลข 1000 ครั้งล่าสุดเป็นตัวอย่างข้อมูล วิธีที่ง่ายที่สุดในการทำแบบทดสอบนี้คือการใช้อาร์เรย์แบบวงกลมค่าเฉลี่ยเคลื่อนที่แบบเสวนาและค่าเฉลี่ยเคลื่อนที่ที่เรียบง่ายกว่าและพบว่าผลลัพธ์จากอาร์เรย์แบบวงกลมเหมาะกับความต้องการของฉันมากที่สุด ถาม 12 มิ.ย. 12 เวลา 4:38 หากความต้องการของคุณเรียบง่ายคุณอาจลองใช้ค่าเฉลี่ยเคลื่อนที่แบบเสวนา ใส่เพียงแค่คุณสร้างตัวแปรสะสมและเมื่อโค้ดของคุณดูที่ตัวอย่างแต่ละโค้ดจะอัปเดตข้อมูลสะสมด้วยค่าใหม่ คุณสามารถเลือกค่า alpha คงที่ระหว่าง 0 ถึง 1 และคำนวณค่านี้: คุณเพียงแค่หาค่า alpha ที่ผลของตัวอย่างที่กำหนดจะใช้เวลาประมาณ 1000 ตัวอย่างเท่านั้น อืมฉันไม่แน่ใจว่านี่เหมาะกับคุณแล้วตอนนี้ฉันวางมันไว้ที่นี่แล้ว ปัญหาคือว่า 1000 เป็นหน้าต่างยาวสวยสำหรับค่าเฉลี่ยเคลื่อนที่ที่อธิบายไม่แน่ใจว่ามีอัลฟาที่จะกระจายค่าเฉลี่ยมากกว่า 1000 หมายเลขล่าสุดโดยไม่ต้อง underflow ในการคำนวณจุดลอย แต่ถ้าคุณต้องการค่าเฉลี่ยที่เล็กลงเช่น 30 ตัวเลขหรือมากกว่านี่เป็นวิธีที่ง่ายและรวดเร็วในการดำเนินการ ตอบ 12 มิ.ย. 12 เวลา 4:44 1 ในโพสต์ของคุณ ค่าเฉลี่ยเคลื่อนที่ที่อธิบายได้จะทำให้ตัวแปรอัลฟ่าเป็นตัวแปรได้ ดังนั้นจึงช่วยให้สามารถใช้คำนวณค่าเฉลี่ยของฐานเวลา (เช่นไบต์ต่อวินาที) ถ้าเวลานับตั้งแต่การอัปเดตสะสมครั้งล่าสุดเป็นเวลามากกว่า 1 วินาทีคุณจะยอมให้ alpha เป็น 1.0 มิเช่นนั้นคุณสามารถปล่อยให้ alpha เป็น (usecs ตั้งแต่ update1000000 ครั้งล่าสุด) ndash jxh Jun 12 12 at 6:21 โดยทั่วไปฉันต้องการติดตามค่าเฉลี่ยเคลื่อนที่ของกระแสอย่างต่อเนื่องของกระแสตัวเลขจุดลอยใช้ล่าสุด 1000 หมายเลขเป็นตัวอย่างข้อมูล โปรดทราบว่าด้านล่างปรับปรุงชุดค่าผสมทั้งหมดเป็นองค์ประกอบที่เพิ่มขึ้นโดยไม่ต้องเสียค่าใช้จ่ายในการคำนวณ O (N) traversal เพื่อคำนวณผลรวม - จำเป็นสำหรับค่าเฉลี่ย - ตามความต้องการ ทั้งหมดถูกกำหนดเป็นพารามิเตอร์อื่นจาก T เพื่อสนับสนุนเช่น ใช้ยาวนานเมื่อรวม 1000 ยาว s, int สำหรับ char s หรือ double เพื่อรวม float s นี่เป็นบิตที่มีข้อบกพร่องในการที่ numsamples อาจผ่าน INTMAX - ถ้าคุณสนใจคุณสามารถใช้ unsigned long long หรือใช้สมาชิกข้อมูล bool พิเศษเพื่อบันทึกเมื่อเติมคอนเทนเนอร์เป็นครั้งแรกในขณะที่วนรอบ numsamples รอบ (ดีที่สุดแล้วเปลี่ยนชื่อบางอย่างที่ไม่เป็นอันตรายเช่น pos) ตอบ 12 มิ.ย. 12 at 5:19 สมมติว่าตัวดำเนินการ quotvoid (T sample) quot ก็คือ quotvoid operatorltlt (T sample) quot ndash o วันที่ 8 มิ.ย. 14 เวลา 11:52 น. oPhút ahhh เห็นดี จริงฉันตั้งใจจะให้โมฆะดำเนิน () (T ตัวอย่าง) แต่แน่นอนคุณสามารถใช้สิ่งที่คุณต้องการสัญกรณ์. จะแก้ไขขอบคุณ ndash Tony D Jun 8 14 at 14:27 ฉันมีข้อมูลจำนวน 4000 หุ้นและคำนวณหาค่าเฉลี่ยเคลื่อนที่สำหรับค่าข้อมูลทั้งหมด แต่เนื่องจากค่าเฉลี่ยเคลื่อนที่อยู่บนข้อมูลก่อนหน้าและฉันไม่สามารถคำนวณ SMA 15 วันสำหรับ 14 วันแรกข้าม 14 วันแรกและคำนวณ SMA ในส่วนที่เหลือของข้อมูล และจะต้องใช้ LINQ เพื่อให้บรรลุ ทุกคนสามารถให้ตัวอย่างหรือคำใบ้วิธีการใช้ LINQ ในการคำนวณค่าเฉลี่ยเคลื่อนที่ผลผลิตสำหรับค่าเฉลี่ยอยู่ที่ประมาณ 500s i dont จริงๆเข้าใจว่าเป็นไปได้ที่จะได้รับค่าสูงที่ ย้าย averager กับผลรวมอาร์เรย์: 06072012 562,49 571,72 06082012 565,84 580,32 06112012 568,56 571,17 06122012 569,55 576,16 06132012 570,56 572,16 06142012 570,63 571,53 06152012 571,21 574,13 06182012 572,78 585,78 06192012 573,79 587,41 06202012 574,23 585,74 06212012 574,22 577,67 06222012 575,63 582,10 06252012 576,06 570,77 06262012 576,68 572,03 06272012 576,88 574.50 06282012 576.7 569.05 06292012 576.95 584.00 07022012 578.37 592.52 07032012 579.92 599.41 07032012 581.74 599.41 แก้ไขโดย Leemx ศุกร์, พฤศจิกายน 16, 2012 2:59 น. ย้ายโดย Lisa Zhu เจ้าหน้าที่ที่อาจเกิดขึ้นใน Microsoft Monday, November 19, 2012 7:38 AM linq related (From. : เพื่อสร้างค่าเฉลี่ยเคลื่อนที่ฉันจะเริ่มต้นด้วยการสร้างช่วงตั้งแต่ 0 ถึง (ความยาวของรายการข้อมูล - ความยาวของระยะเวลาเคลื่อนที่) จากนั้นสำหรับแต่ละค่าในช่วง เลือกองค์ประกอบ x ถึง x 43 ระยะเวลาการเคลื่อนที่และคำนวณค่าเฉลี่ย ทั้งหมดในงบ LINQ หนึ่งดี: โปรดทราบว่านี้ไม่ได้มีประสิทธิภาพมากเนื่องจากคุณโดยทั่วไปย้ำกว่ารายการข้อมูลสำหรับทุกค่าในช่วง .. Hey, ดูระบบนี้ช่วยให้ลายเซ็นของกว่า 60 cha แก้ไขโดย Arno Brouwer ศุกร์พฤศจิกายน 23, 2012 4:42 PM Marked as answer โดย Alexander Sun เมื่อวันศุกร์ที่ 7 ธันวาคม พ. ศ. 2555 2:44 น. วันศุกร์ที่ 23 พฤศจิกายน พ. ศ. 2555 เวลา 4:41 น. คำตอบทั้งหมดข้อความ LINQ ของคุณจะช่วยได้ การเพิ่มประสิทธิภาพ quotPremature เป็นรากของ evil. quot ทั้งหมด - Knuth หากต้องการสร้างค่าเฉลี่ยเคลื่อนที่เราจะเริ่มจากการสร้างช่วงตั้งแต่ 0 ถึง (ความยาวของรายการข้อมูล - ความยาวของช่วงการเคลื่อนที่) จากนั้นสำหรับแต่ละค่าในช่วงเลือกองค์ประกอบ x เป็นระยะเวลาการเคลื่อนย้าย x 43 และคำนวณค่าเฉลี่ย ทั้งหมดในงบ LINQ หนึ่งดี: โปรดทราบว่านี้ไม่ได้มีประสิทธิภาพมากเนื่องจากคุณโดยทั่วไปย้ำกว่ารายการข้อมูลสำหรับทุกค่าในช่วง .. Hey, ดูระบบนี้ช่วยให้ลายเซ็นของกว่า 60 cha แก้ไขโดย Arno Brouwer ศุกร์พฤศจิกายน 23 ธันวาคม 2012 16:42 น. วันจันทร์ที่ 23 พฤศจิกายน พ. ศ. 2555 เวลา 20:43 น. วันอังคารที่ 23 พฤศจิกายน พ. ศ. 2555 เวลา 04:31 น. ไมโครซอฟท์กำลังทำการสำรวจออนไลน์เพื่อทำความเข้าใจกับความคิดเห็นของคุณเกี่ยวกับเว็บไซต์ MSDN หากคุณเลือกที่จะเข้าร่วมการสำรวจออนไลน์จะนำเสนอแก่คุณเมื่อคุณออกจากเว็บไซต์ Msdn Web คุณต้องการเข้าร่วมช่วยเราปรับปรุง MSDN หรือไม่ ไปที่หน้า UserVoice ของเราเพื่อส่งและออกเสียงลงคะแนนเกี่ยวกับแนวคิด Center Dev ศูนย์ข้อมูลแหล่งเรียนรู้ยินดีต้อนรับสู่ LinuxQuestions. org ชุมชน Linux ที่เป็นมิตรและใช้งานได้ ขณะนี้คุณกำลังดู LQ ในฐานะแขก เมื่อเข้าร่วมชุมชนของเราคุณจะสามารถโพสต์หัวข้อรับจดหมายข่าวของเราใช้การค้นหาขั้นสูงสมัครรับข้อมูลหัวข้อและเข้าถึงคุณลักษณะพิเศษอื่น ๆ ได้มากมาย การลงทะเบียนเป็นไปอย่างรวดเร็วง่ายและฟรีอย่างแน่นอน เข้าร่วมชุมชนของเราวันนี้โปรดทราบว่าสมาชิกที่ลงทะเบียนเห็นโฆษณาน้อยลงและ ContentLink ถูกปิดใช้งานโดยสิ้นเชิงเมื่อคุณเข้าสู่ระบบหากคุณมีปัญหาในการลงทะเบียนหรือเข้าสู่ระบบบัญชีของคุณโปรดติดต่อเรา หากคุณต้องการตั้งรหัสผ่านใหม่คลิกที่นี่ โปรดเข้าสู่หน้านี้เพื่อล้างคุกกี้ที่เกี่ยวข้องกับ LQ ทั้งหมด บทนำสู่ระบบ Linux - คู่มือเกี่ยวกับคู่มือคู่มือนี้สร้างขึ้นเพื่อเป็นภาพรวมของระบบปฏิบัติการ Linux มุ่งสู่ผู้ใช้ใหม่ในฐานะการสำรวจและการเริ่มต้นใช้งานด้วยการออกกำลังกายในตอนท้ายของแต่ละบท สำหรับผู้เข้ารับการฝึกอบรมขั้นสูงอาจเป็นการอ้างอิงเดสก์ท็อปและรวบรวมความรู้พื้นฐานที่จำเป็นต่อการดำเนินการกับระบบและการดูแลระบบเครือข่าย หนังสือเล่มนี้มีตัวอย่างชีวิตจริงมากมายที่ได้จากประสบการณ์ของผู้เขียนในฐานะระบบ Linux และผู้ดูแลระบบเครือข่ายครูฝึกและที่ปรึกษา พวกเขาหวังว่าตัวอย่างเหล่านี้จะช่วยให้คุณเข้าใจถึงระบบลีนุกซ์ได้ดีขึ้นและคุณรู้สึกเป็นกำลังใจที่จะลองใช้สิ่งต่างๆด้วยตัวคุณเอง คลิกที่นี่เพื่อรับคู่มือฉบับสมบูรณ์แบบนี้ฟรีเป็นไปได้ที่จะใช้ค่าเฉลี่ยเคลื่อนที่ใน C โดยไม่จำเป็นต้องมีหน้าต่างของตัวอย่าง Ive พบว่าฉันสามารถเพิ่มประสิทธิภาพได้เล็กน้อยโดยการเลือกขนาดหน้าต่าง thats อำนาจของสองเพื่อให้สำหรับ บิตขยับแทนการหาร แต่ไม่จำเป็นต้องบัฟเฟอร์จะดี มีวิธีแสดงผลลัพธ์เฉลี่ยเคลื่อนที่ใหม่ตามผลการค้นหาเดิมและตัวอย่างใหม่กำหนดค่าเฉลี่ยเคลื่อนที่ตัวอย่างเช่นข้ามหน้าต่างตัวอย่าง 4 ตัวอย่าง: เพิ่มตัวอย่างใหม่ e: ค่าเฉลี่ยเคลื่อนที่สามารถใช้งานได้แบบ recursively , แต่สำหรับการคำนวณที่แน่นอนของค่าเฉลี่ยเคลื่อนที่คุณต้องจำตัวอย่างการป้อนข้อมูลที่เก่าแก่ที่สุดในผลรวม (เช่นในตัวอย่างของคุณ) สำหรับค่าเฉลี่ยเคลื่อนที่ N ที่คุณคำนวณ: โดยที่ yn คือสัญญาณขาออกและ xn เป็นสัญญาณขาเข้า อีคิว (1) สามารถเขียน recursively เป็นดังนั้นคุณจำเป็นต้องจำตัวอย่าง xn-N เพื่อคำนวณ (2) ที่ระบุโดย Conrad Turner คุณสามารถใช้หน้าต่างแทนยาวได้ (ไม่ จำกัด ) แทนซึ่งจะช่วยให้คุณสามารถคำนวณเอาท์พุทได้เฉพาะจากผลลัพธ์ที่ผ่านมาและอินพุทปัจจุบัน: แต่นี่ไม่ใช่ค่าเฉลี่ยเคลื่อนที่ (unweighted) แต่เป็นค่าชี้แจง (อย่างน้อยที่สุดในทางทฤษฎี) คุณไม่เคยลืมอะไรเลย (น้ำหนักเพียงเล็กน้อยและเล็กลงสำหรับตัวอย่างที่ไกลในอดีต) ฉันใช้ค่าเฉลี่ยเคลื่อนที่โดยไม่มีหน่วยความจำรายการสำหรับโปรแกรมติดตาม GPS ที่ฉันเขียน ฉันเริ่มต้นด้วย 1 ตัวอย่างและหารด้วย 1 เพื่อให้ได้ค่าเฉลี่ยปัจจุบัน จากนั้นผมจะเพิ่มตัวอย่าง anothe และหารด้วย 2 เป็นค่าเฉลี่ยปัจจุบัน นี้ยังคงจนกว่าฉันจะได้รับความยาวเฉลี่ย ทุกครั้งหลังจากนั้นฉันเพิ่มในตัวอย่างใหม่ให้ได้ค่าเฉลี่ยและลบค่าเฉลี่ยดังกล่าวออกจากยอดรวม ฉันไม่ใช่นักคณิตศาสตร์ แต่ดูเหมือนจะเป็นวิธีที่ดีที่จะทำ ฉันคิดว่ามันจะเปิดท้องของคนที่แต่งตัวประหลาดคณิตศาสตร์จริง แต่ก็จะเปิดออกเป็นหนึ่งในวิธีที่ได้รับการยอมรับในการทำมัน และทำงานได้ดี เพียงแค่จำไว้ว่ายิ่งความยาวของคุณยิ่งใหญ่เท่าไรก็ยิ่งช้าลงตามสิ่งที่คุณต้องการทำ นั่นอาจไม่สำคัญตลอดเวลา แต่เมื่อไปตามดาวเทียมถ้าคุณช้าเส้นทางอาจอยู่ไกลจากตำแหน่งจริงและจะดูไม่ดี คุณอาจมีช่องว่างระหว่างจุดเริ่มต้นและจุดต่อท้าย ฉันเลือกความยาวของ 15 ปรับปรุง 6 ครั้งต่อนาทีเพื่อให้ได้อย่างราบรื่นเพียงพอและไม่ได้รับไกลจากตำแหน่งนั่งจริงกับจุดเส้นทางที่ราบรื่น ตอบ 16 พค. 16 ที่ 23:03 เริ่มต้นทั้งหมด 0, นับ 0 (ทุกครั้งที่เห็นค่าใหม่จากนั้นหนึ่งอินพุท (scanf) หนึ่งเพิ่ม totalnewValue, หนึ่งที่เพิ่มขึ้น (นับ) หนึ่งหารเฉลี่ย (totalcount) นี้จะเป็นค่าเฉลี่ยเคลื่อนที่มากกว่า input ทั้งหมดในการคํานวณคาเฉลี่ยโดยใชเพียง 4 อินพุทตอไปเทานั้นจะตองใช4 inputvariables อาจคัดลอก input แตละ input ไปยัง inputvariable ที่สูงกวาจากนั้นคา new moving average เปน sum ของ inputvariables 4 หารดวย 4 (right shift 2) ดีถ้าทุกปัจจัยการผลิตเป็นบวกเพื่อให้การคำนวณเฉลี่ยตอบกุมภาพันธ์ 3 15 ที่ 4:06 ที่จริงจะคำนวณค่าเฉลี่ยรวมและไม่เฉลี่ยเคลื่อนไหวตามนับได้รับผลกระทบขนาดใหญ่ของตัวอย่างการป้อนข้อมูลใหม่ ๆ กลายเป็น vanishingly ขนาดเล็ก ndash Hilmar Feb 3 15 เวลา 13:53 คำตอบของคุณ 2017 Stack Exchange, Inc

Comments