Wednesday, 12 July 2017

Matplotlib เคลื่อนไหว เฉลี่ย ตัวอย่างเช่น


ฉันรู้ว่านี่เป็นคำถามเก่า แต่นี่คือโซลูชันที่ไม่ใช้โครงสร้างข้อมูลหรือไลบรารีพิเศษใด ๆ เป็นเส้นตรงในจำนวนองค์ประกอบของรายการป้อนข้อมูลและฉันไม่สามารถคิดวิธีอื่นใดเพื่อให้มีประสิทธิภาพมากขึ้น (จริงถ้าใครรู้วิธีที่ดีกว่าในการจัดสรรผลโปรดแจ้งให้เราทราบ) หมายเหตุ: นี้จะเร็วมากโดยใช้อาร์เรย์ numpy แทนรายการ แต่ฉันต้องการกำจัด dependencies ทั้งหมด นอกจากนี้ยังสามารถปรับปรุงประสิทธิภาพได้ด้วยการประมวลผลแบบมัลติเธรดฟังก์ชันจะถือว่ารายการอินพุทเป็นมิติเดียวดังนั้นโปรดระวัง UPD: Alleo และ jasaarim เสนอโซลูชันที่มีประสิทธิภาพมากขึ้น คุณสามารถใช้ np. convolve ได้ว่า: อาร์กิวเมนต์โหมดระบุวิธีจัดการกับขอบ ฉันเลือกโหมดที่ถูกต้องที่นี่เพราะฉันคิดว่าวิธีที่คนส่วนใหญ่คาดหวังว่าจะทำงานได้ดี แต่คุณอาจมีความสำคัญอื่น ๆ นี่เป็นพล็อตที่แสดงให้เห็นถึงความแตกต่างระหว่างโหมด: ตอบ 24 มี.ค. 14 เวลา 22:01 ฉันชอบวิธีนี้เนื่องจากมีความสะอาด (บรรทัดเดียว) และมีประสิทธิภาพค่อนข้าง (งานที่ทำภายใน numpy) แต่โซลูชันที่มีประสิทธิภาพของ Alleo โดยใช้ numpy. cumsum มีความซับซ้อนที่ดีกว่า ndash Ulrich Stern Sep 25 15 at 0:31 คุณสามารถคำนวณค่าเฉลี่ยในการทำงานได้ด้วยโชคดีที่ numpy มีฟังก์ชัน convolve ที่เราสามารถใช้เพื่อเพิ่มความเร็วได้ ค่าเฉลี่ยของการวิ่งเท่ากับเวกเตอร์ที่มีค่า x ยาว x ยาวเท่ากับสมาชิกทั้งหมดเท่ากับ 1N การดำเนินการแบบ numpy ของ convolve ประกอบด้วยการเริ่มต้นชั่วคราวดังนั้นคุณต้องลบจุด N-1 ตัวแรก: ในเครื่องของฉันเวอร์ชันเร็วจะเร็วกว่า 20-30 เท่าขึ้นอยู่กับความยาวของเวกเตอร์อินพุตและขนาดของหน้าต่างเฉลี่ย . โปรดทราบว่า convolve มีโหมดเดียวกันซึ่งดูเหมือนว่าควรจะกล่าวถึงปัญหาชั่วคราวที่เริ่มต้น แต่จะแบ่งระหว่างจุดเริ่มต้นและจุดสิ้นสุด จะลบชั่วคราวจากปลายและจุดเริ่มต้นไม่ได้หนึ่ง ดีฉันเดาว่าเป็นเรื่องของลำดับความสำคัญฉันdon’ t ต้องจำนวนเดียวกันของผลลัพธ์ในค่าใช้จ่ายในการรับความลาดชันไปทางศูนย์ที่ isn39t มีในข้อมูล BTW นี่คือคำสั่งเพื่อแสดงความแตกต่างระหว่างโหมด: โหมด (39full39, 39same39, 39valid39) พล็อต (convolve (คน ((200)), คน ((50,)) 4750, โมเด็ม)) สำหรับโหมด m in แกน (-10, 251, -.1, 1.1) (โหมด, loc39lower center39) (ด้วย pyplot และ numpy ที่นำเข้า) ndash lapis 24 มี.ค. 14 เวลา 13:56 น. แพนด้าเหมาะสำหรับเรื่องนี้มากกว่า NumPy หรือ SciPy ฟังก์ชั่นที่ใช้งานได้สะดวก นอกจากนี้ยังส่งกลับอาร์เรย์ NumPy เมื่ออินพุตเป็นอาร์เรย์ มันยากที่จะเอาชนะ rollingmean ในการปฏิบัติงานใด ๆ ที่กำหนดเอง Python บริสุทธิ์ นี่เป็นตัวอย่างประสิทธิภาพเทียบกับสองของการแก้ปัญหาที่นำเสนอ: นอกจากนี้ยังมีตัวเลือกที่ดีในการจัดการกับค่าขอบ I39m รำคาญเสมอโดยฟังก์ชั่นการประมวลผลสัญญาณที่ส่งกลับสัญญาณขาออกที่มีรูปร่างแตกต่างจากสัญญาณอินพุตเมื่อทั้งอินพุทและเอาต์พุตมีลักษณะเหมือนกัน (เช่นสัญญาณทั้งสองชั่วขณะ) การติดต่อกับตัวแปรอิสระที่เกี่ยวข้อง (เช่นเวลาความถี่) ทำให้การติดต่อหรือเปรียบเทียบไม่ตรงประเด็น อย่างไรก็ตามหากคุณแชร์ความรู้สึกคุณอาจต้องการเปลี่ยนบรรทัดสุดท้ายของฟังก์ชันที่เสนอเป็น ynp. convolve (ww. sum (), s, mode39same39) return ywindowlen-1 :-( windowlen-1) ndash Christian O39Reilly Aug 25 15 at 19:56 นิด ๆ หน่อย ๆ ไปงานปาร์ตี้ แต่ Ive ทำหน้าที่เล็ก ๆ น้อย ๆ ของตัวเองที่ไม่ห่อรอบปลายหรือแผ่นที่มี zeroes ที่ใช้แล้วเพื่อหาค่าเฉลี่ยด้วย เป็นอีกหนึ่งการรักษาก็คือว่ามันอีกครั้ง - ตัวอย่างสัญญาณที่เว้นระยะห่างเชิงเส้น ปรับแต่งโค้ดตามต้องการเพื่อรับคุณลักษณะอื่น ๆ เมธอดนี้เป็นเมทริกซ์แบบง่ายๆที่มีเคอร์เนล Gaussian แบบปกติ การใช้งานง่ายในสัญญาณไซน์ที่มีการกระจายเสียงรบกวนปกติ: คำถามนี้ตอนนี้เก่ากว่าเมื่อ NeXuS เขียนเกี่ยวกับเรื่องนี้เมื่อเดือนที่แล้ว แต่ฉันชอบวิธีการที่รหัสของเขาเกี่ยวข้องกับกรณีขอบ อย่างไรก็ตามเนื่องจากเป็นค่าเฉลี่ยเคลื่อนที่แบบง่ายๆผลของข้อมูลจะอยู่ในช่วงหลังข้อมูลที่ใช้ ฉันคิดว่าการจัดการกับขอบกรณีในทางที่น่าพอใจมากขึ้นกว่าโหมด NumPys ถูกต้อง เหมือนกัน. และเต็มรูปแบบสามารถทำได้โดยการใช้วิธีการเดียวกันกับวิธีการที่ใช้วิธีการหมุน () การมีส่วนร่วมของฉันใช้ค่าเฉลี่ยในการทำงานกลางเพื่อจัดตำแหน่งผลการค้นหาด้วยข้อมูล เมื่อมีสองสามจุดสำหรับหน้าต่างขนาดเต็มรูปแบบที่จะใช้ค่าเฉลี่ยที่คำนวณได้จะถูกคำนวณจากหน้าต่างขนาดเล็กที่ต่อเนื่องที่ขอบของอาร์เรย์ ที่จริงแล้วจากหน้าต่างขนาดใหญ่ที่ต่อเนื่อง แต่เป็นรายละเอียดการใช้งาน มันค่อนข้างช้าเพราะใช้ convolve () และมีแนวโน้มว่าจะได้รับการเติมแต่งขึ้นค่อนข้างมากโดย Pythonista ที่แท้จริง แต่ผมเชื่อว่าแนวคิดนี้ลุกขึ้นยืน ตอบ Jan 2 ที่ 0:28 np. convolve ดี แต่ช้าเมื่อความกว้างของหน้าต่างเติบโตขึ้นมาก คำตอบบางอย่างให้ขั้นตอนวิธีที่มีประสิทธิภาพมากขึ้นด้วย np. cumsum แต่ดูเหมือนจะไม่สามารถจัดการค่าขอบได้ ตัวฉันเองได้ใช้อัลกอริทึมซึ่งอาจจัดการกับปัญหานี้ได้ดีถ้าปัญหานี้ได้รับการประกาศให้เป็น: Inputename พารามิเตอร์สามารถคิดเป็น 2 windowwidth 1 ฉันรู้ว่ารหัสนี้อ่านไม่ได้นิดหน่อยถ้า u พบว่ามีประโยชน์และต้องการขยายบางส่วนโปรดแจ้งให้เราทราบและฉันจะอัปเดตคำตอบนี้ (เนื่องจากการเขียนคำอธิบายอาจเสียค่าใช้จ่ายมากเวลาฉันหวังว่าฉันจะทำเฉพาะเมื่อมีคนต้องการมันกรุณาให้อภัยฉันสำหรับความเกียจคร้านของฉัน :)) ถ้าเพียง u มีความสนใจในรุ่นเดิม: ยิ่งไม่สามารถอ่านได้: ได้รับการกำจัดปัญหาขอบโดย padding ศูนย์รอบแถว แต่แก้ปัญหาที่สองโพสต์ที่นี่จัดการกับมันในทางที่ยากและตรง :) lapis ใช่ แต่ให้บอกว่าคุณใช้วิธี cumsum เมื่อเห็บครั้งแรกและบันทึกอาร์เรย์เฉลี่ยกลิ้งของคุณสำหรับ ขีดถัดไป ทุกขีดหลังจากนั้นคุณเพียง แต่ต้องเพิ่มค่าเฉลี่ยเคลื่อนที่ล่าสุดลงในอาร์เรย์ที่จัดเก็บไว้ การใช้วิธีนี้คุณจะไม่คำนวณใหม่สิ่งที่คุณได้คำนวณไปแล้ว: เมื่อคุณติ๊กเครื่องหมาย cumsum หลังจากนั้นคุณเพียงแค่เพิ่ม quotmean ของช่วงเวลาที่เป็น elementsquot ซึ่งเป็นเวลาเร็วกว่า 2 เท่าสำหรับทิปที่ตามมาทั้งหมด ถ้าคุณเลือกที่จะม้วนของคุณเองแทนที่จะใช้ห้องสมุดที่มีอยู่โปรดทราบข้อผิดพลาดจุดลอยและพยายามลดผลกระทบของ: ถ้าค่าทั้งหมดของคุณประมาณคำสั่งเดียวกันของขนาด , แล้วนี้จะช่วยรักษาความแม่นยำโดยการเพิ่มค่าของ magnitudes ประมาณประมาณ. ในประโยคสุดท้ายของฉันฉันพยายามระบุสาเหตุที่ทำให้เกิดข้อผิดพลาดเกี่ยวกับจุดลอยตัว หากค่าสองค่าใกล้เคียงกับขนาดความเข้มแล้วการเพิ่มค่าเหล่านี้จะสูญเสียความแม่นยำน้อยกว่าถ้าคุณเพิ่มจำนวนที่มากไปเป็นขนาดเล็กมาก รหัสนี้รวมค่าของ quotadjacentquot ในลักษณะที่แม้แต่ผลรวมระดับกลางควรมีขนาดใกล้เคียงกันอย่างสมเหตุสมผลเพื่อลดความผิดพลาดของจุดลอยตัว ไม่มีอะไรที่เป็นหลักฐานโง่ แต่วิธีนี้ช่วยให้คู่โครงการดำเนินการได้ไม่ดีมากในการผลิต ndash Mayur Patel 15 ธ. ค. 14 เวลา 17:22 น. Alleo: แทนที่จะทำหนึ่งครั้งต่อค่าคุณจะทำสอง หลักฐานเหมือนกันกับปัญหาการพลิกแพลง อย่างไรก็ตามจุดของคำตอบนี้ไม่จำเป็นต้องมีประสิทธิภาพ แต่แม่นยำ การใช้หน่วยความจำสำหรับค่าเฉลี่ย 64 บิตจะไม่เกิน 64 องค์ประกอบในแคชจึงเป็นมิตรกับการใช้หน่วยความจำด้วย ndash Mayur Patel 29 ธ. ค. ที่ผ่านมา 17: 04 ตัวอย่างต่อไปนี้แสดงค่าเฉลี่ยเคลื่อนที่ของค่า WINDOW ก่อนหน้านี้ เราตัดค่าแรก (WINDOW -1) เนื่องจากเราสามารถหาค่าเฉลี่ยก่อนหน้าได้ (พฤติกรรมเริ่มต้นสำหรับ convolution คือสมมติว่าค่าก่อนเริ่มลำดับของเราคือ 0) (เพิ่มเติมอย่างเป็นทางการเราสร้างลำดับ y สำหรับลำดับ x ที่ yi (xi x (i1) 8230 x (in)) n) ใช้ฟังก์ชัน numpy8217s convolution นี่คือจุดประสงค์ทั่วไปในการเคลื่อนที่โดยเฉลี่ย การเปลี่ยนการชั่งน้ำหนักทำให้ค่าบางอย่างมีความสำคัญยิ่งขึ้นในการหักกลบลบหนี้อย่างเหมาะสมช่วยให้คุณสามารถดูค่าเฉลี่ยโดยรอบจุดมากกว่าก่อนจุด แทนที่จะตัดทอนค่าเราสามารถกำหนดค่าเริ่มต้นในสถานที่ดังที่แสดงในตัวอย่างนี้เราเคยแนะนำวิธีสร้างค่าเฉลี่ยเคลื่อนที่โดยใช้ python บทแนะนำนี้จะเป็นหัวข้อต่อเนื่องของหัวข้อนี้ ค่าเฉลี่ยเคลื่อนที่ในบริบทที่เรียกว่าค่าเฉลี่ยของการวนซ้ำ (rollingrunning average) เป็นรูปแบบของการตอบสนองต่อแรงกระตุ้นแน่นอน ในกวดวิชาก่อนหน้านี้เราได้วางแผนค่าของอาร์เรย์ x และ y: Let8217s พล็อต x เทียบกับค่าเฉลี่ยเคลื่อนที่ของ y ที่เราจะเรียก yMA: ประการแรก let8217s จะปรับความยาวของทั้งสองอาร์เรย์: และเพื่อแสดงสิ่งนี้ในบริบท: ผลลัพธ์ กราฟ: เพื่อช่วยให้เข้าใจเรื่องนี้พล็อตสองความสัมพันธ์ที่แตกต่างกัน: x vs y และ x vs MAy: ค่าเฉลี่ยเคลื่อนที่ที่นี่เป็นพล็อตสีเขียวที่เริ่มต้นที่ 3: แบ่งปันนี้: เช่นนี้: โพสต์การนำทางฝากความคิดเห็นยกเลิกการตอบ ต้องการอ่านส่วนสุดท้ายในชุดข้อมูลขนาดใหญ่หวังว่ามันจะมาเร็ว ๆ นี้ bloggers8230 เช่นนี้ More ข้อมูลตัวบ่งชี้ด้วย Matplotlib ในการสอน Matplotlib นี้เราครอบคลุมการเพิ่มฟังก์ชันง่ายๆสองในการคำนวณข้อมูลเพื่อให้เราสามารถเติมแกนของเราด้วย หนึ่งคือค่าเฉลี่ยเคลื่อนที่ที่เรียบง่ายอื่น ๆ คือการคำนวณค่าต่ำสุดที่ต่ำและง่ายสำหรับราคา ฟังก์ชันใหม่ ๆ เหล่านี้คือ: คุณไม่จำเป็นต้องมุ่งเน้นไปที่การทำความเข้าใจว่าค่าเฉลี่ยเคลื่อนที่ทำงานได้ดีเพียงแค่ทำเช่นนี้สำหรับข้อมูลตัวอย่างบางส่วนเพื่อให้เราสามารถเรียนรู้เพิ่มเติมเกี่ยวกับการปรับแต่ง Matplotlib ได้ นอกจากนี้เราต้องการกำหนดค่าสำหรับการย้ายค่าเฉลี่ยที่ด้านบนสุดของสคริปต์ของเรา: ถัดไปภายในฟังก์ชัน graphdata ของเรา: ที่นี่เราคำนวณค่าเฉลี่ยเคลื่อนที่สองค่าและค่าเฉลี่ยสูงและต่ำ นอกจากนี้เรายังกำหนดจุดเริ่มต้น เราทำเช่นนี้เพราะเราต้องการให้ข้อมูลของเราเป็นระเบียบ ค่าเฉลี่ยเคลื่อนที่ 20 ตัวต้องใช้จุดข้อมูล 20 จุดตัวอย่างเช่น ซึ่งหมายความว่าเราไม่สามารถคำนวณค่าเฉลี่ยเคลื่อนไหว 20 วันได้ในวันที่ 5 เนื่องจากเหตุนี้เราจะต้องสูญเสียข้อมูลบางส่วนเมื่อคำนวณค่าเฉลี่ยเคลื่อนที่ ในการจัดการกับการลบข้อมูลนี้เราจะคำนวณจำนวนข้อมูลที่เราควรจะต้องมีกับตัวแปรเริ่มต้น จากจุดนี้เราจะสามารถคำนวณค่าเฉลี่ยเคลื่อนที่โดยเริ่มต้นจากค่าเริ่มต้น: และจัดเรียงข้อมูลโดยทำเช่นนี้ไปยังทุกแปลงหากต้องการ ต่อไปเราสามารถคำนวณค่าต่ำสุดบน ax1 ด้วย: สุดท้ายเราสามารถเพิ่มค่าเฉลี่ยเคลื่อนที่ที่ ax3 ด้วย: โค้ดแบบเต็มของเรารวมถึงการเพิ่มช่วงเวลาที่เราเคยใช้อยู่: โค้ดนี้จะช่วยให้เรามีบางอย่างเช่นการสร้างความคืบหน้า แต่เรา ยังมีจำนวนมาก clealning ที่จะทำในการกวดวิชาต่อไปดีจะทำความสะอาดสิ่งขึ้นเล็กน้อยและแสดงแบบไดนามิกเติม

No comments:

Post a Comment