Thursday 27 July 2017

Plot Moving Average Python


Saya bermain dengan Python sedikit lagi, dan saya menemukan sebuah buku yang rapi dengan contoh-contohnya. Salah satu contohnya adalah memilah beberapa data. Saya memiliki file txt dengan dua kolom dan saya memiliki datanya. Saya merencanakan data dengan baik, tapi dalam latihan yang dikatakannya: Ubah program Anda lebih jauh untuk menghitung dan merencanakan rata-rata data yang sedang berjalan, yang didefinisikan oleh: di mana r5 dalam kasus ini (dan yk adalah kolom kedua dalam file data) . Minta program memplot data asli dan rata-rata running pada grafik yang sama. Sejauh ini saya memiliki ini: Jadi bagaimana cara menghitung jumlah di Mathematica yang sederhana karena manipulasi simbolisnya (Sumi, misalnya), tapi bagaimana menghitung jumlah di python yang mengambil setiap sepuluh poin dalam data dan rata-rata, dan melakukannya Sampai akhir poin saya melihat buku itu, tapi tidak menemukan yang akan menjelaskannya: kode heltonbikers melakukan triknya: D Terima kasih banyak :) Ada masalah dengan jawaban yang diterima. Saya pikir kita perlu menggunakan yang benar dan bukan sama di sini - kembali numpy. convolve (interval, jendela, sama). Sebagai contoh, cobalah MA dari data ini set 1,5,7,2,6,7,8,2,2,7,8,3,7,3,7,3,15,6 - hasilnya Harus 4,2,5,4,6,0,5,0,5,0,5,2,5,4,4,4,5,4,5,6,5,6,4,6,7,0,6,8. Namun sama-sama memberi kita output yang salah sebesar 2.6,3,0,4,2,5,4,6,0,5,0,5,0,5,2,5,4,4,4,5,4,5,6,5,6, 4,6,7,0,6,8,6,2,4,8 Kode Rusty untuk mencoba ini -: Coba ini dengan amp yang valid sama dan lihat apakah matematika masuk akal. Menjawab 29 Oktober 14 di 4:27 Haven mencoba ini, tapi aku akan melihat ke dalamnya, Sudah lama sejak saya diberi kode dengan Python. Ndash dingod Oct 29 14 at 7:07 dingod Mengapa Anda tidak cepat-cepat mencoba ini dengan kode berkarat (dan kumpulan data sampel (sebagai daftar sederhana), saya memposting. Untuk beberapa orang yang malas (seperti saya pada awalnya) - topengnya keluar dari fakta bahwa rata-rata bergerak salah. Mungkin Anda harus mempertimbangkan untuk mengedit jawaban asli Anda. Aku mencobanya kemarin dan memeriksa ganda menyelamatkan wajah saya dari melihat buruk melaporkan ke tingkat Cxo. Yang perlu Anda lakukan adalah mencoba Rata bergerak sama sekali dengan kuotidquot dan waktu lain dengan quotsamequot - dan begitu Anda yakin memberi saya beberapa cinta (aka-up-vote) ndash ekta 29 Okt 14 at 7: 16Saya tahu ini adalah pertanyaan lama, tapi inilah solusinya. Itu tidak menggunakan struktur data tambahan atau perpustakaan. Ini adalah linier dalam jumlah elemen dari daftar masukan dan saya tidak dapat memikirkan cara lain untuk membuatnya lebih efisien (sebenarnya jika ada yang tahu cara yang lebih baik untuk mengalokasikan hasilnya, silakan Biarkan aku tahu) CATATAN: ini akan jauh lebih cepat menggunakan array numpy bukan li St, tapi aku ingin menghilangkan semua dependensi. Ini juga memungkinkan untuk meningkatkan kinerja dengan eksekusi multi-threaded Fungsi mengasumsikan bahwa daftar masukan satu dimensi, jadi hati-hati. Anda bisa menghitung mean yang berjalan dengan: Untungnya, numpy mencakup fungsi konvolve yang bisa kita gunakan untuk mempercepatnya. Mean yang berjalan sama dengan convolving x dengan vektor N yang panjang, dengan semua anggota sama dengan 1N. Implementasi numpy dari convolve mencakup starting transient, jadi Anda harus menghapus titik N-1 pertama: Pada mesin saya, versi cepat 20-30 kali lebih cepat, tergantung pada panjang vektor input dan ukuran jendela rata-rata. . Perhatikan bahwa konvolve tidak termasuk mode yang sama yang sepertinya harus mengatasi masalah transien awal, namun membaginya antara awal dan akhir. Ini menghilangkan sementara dari akhir, dan awalnya tidak memilikinya. Well, saya kira itu masalah prioritas, saya tidak memerlukan jumlah hasil yang sama dengan mengorbankan kemiringan menuju nol yang ada di data. BTW, berikut adalah perintah untuk menunjukkan perbedaan antara mode: mode (39full39, 39same39, 39valid39) plot (convolve (ones ((200,)), yang ((50,)) 4750, modem)) untuk m dalam mode Axis (-10, 251, -.1, 1.1) legenda (mode, loc39lower center39) (dengan pyplot dan numpy import). Ndash lapis Mar 24 14 at 13:56 panda lebih cocok untuk ini daripada NumPy atau SciPy. Fungsi rollingmean melakukan pekerjaan dengan nyaman. Ini juga mengembalikan array NumPy saat input adalah array. Sulit untuk mengalahkan rollingmean dalam performa dengan implementasi Python custom custom. Berikut adalah contoh kinerja terhadap dua solusi yang diajukan: Ada juga pilihan bagus mengenai bagaimana menangani nilai tepi. Saya selalu terganggu oleh fungsi pemrosesan sinyal yang mengembalikan sinyal keluaran dengan bentuk yang berbeda dari pada sinyal input saat kedua input dan output memiliki sifat yang sama (misalnya sinyal temporal). Ini memecah korespondensi dengan variabel independen terkait (misalnya waktu, frekuensi) membuat perencanaan atau perbandingan bukan masalah langsung. Lagi pula, jika Anda berbagi perasaan, Anda mungkin ingin mengubah baris terakhir dari fungsi yang diusulkan sebagai ynp. convolve (ww. sum (), s, mode39same39) kembali ywindowlen-1 :-( windowlen-1) ndash Christian O39Reilly Aug 25 15 pada 19:56 Sedikit terlambat ke pesta, tapi saya telah membuat fungsi kecil saya sendiri yang TIDAK membungkus ujung atau bantalan dengan angka nol yang kemudian digunakan untuk menemukan rata-rata juga. Sebagai perawatan lebih lanjut adalah, bahwa ia juga kembali sampel sinyal pada titik spasial spasi. Sesuaikan kode sesuka hati untuk mendapatkan fitur lainnya. Metode ini merupakan perkalian matriks sederhana dengan kernel Gaussian yang dinormalisasi. Penggunaan sederhana pada sinyal sinusoidal dengan menambahkan noise terdistribusi normal: Pertanyaan ini sekarang bahkan lebih tua dari pada saat NeXuS menulis tentang hal itu bulan lalu, NAMUN saya suka bagaimana kode-kodenya menangani kasus-kasus tepi. Namun, karena ini adalah rata-rata bergerak sederhana, hasilnya tertinggal dari data yang mereka gunakan. Saya berpikir bahwa berurusan dengan kasus tepi dengan cara yang lebih memuaskan daripada mode NumPys yang valid. sama. Dan penuh dapat dicapai dengan menerapkan pendekatan yang serupa dengan metode berbasis konvolusi (). Kontribusi saya menggunakan rata-rata berjalan pusat untuk menyesuaikan hasilnya dengan datanya. Bila ada dua titik yang tersedia untuk jendela ukuran penuh yang akan digunakan, rata-rata berjalan dihitung dari jendela yang lebih kecil berturut-turut di tepi array. Sebenarnya, dari jendela yang berurutan lebih besar, tapi itu detail implementasi. Its relatif lambat karena menggunakan convolve (). Dan mungkin bisa dirapikan cukup banyak oleh Pythonista sejati, namun, saya percaya bahwa gagasan itu berdiri. Dijawab Jan 2 at 0:28 np. convolve bagus tapi lambat saat lebar jendela tumbuh besar. Beberapa jawaban memberikan algoritme yang lebih efisien dengan np. cumsum namun tampaknya tidak mampu menangani nilai tepi. Saya sendiri telah menerapkan algoritma yang bisa menangani masalah ini dengan baik, jika masalah ini dideklarasikan sebagai: Parameter masukan mergenum dapat dianggap sebagai 2 windowwidth 1. Saya tahu kode ini sedikit terbaca jika Anda merasa berguna dan menginginkan beberapa expanations, tolong beritahu saya dan mint update jawaban ini. (Karena menulis sebuah penjelasan mungkin menghabiskan banyak waktu, saya harap saya melakukannya hanya jika seseorang membutuhkannya. Mohon maafkan saya untuk kemalasan saya :)) Kalau saja Anda tertarik dengan versi aslinya: Ini bahkan lebih tidak terbaca: solusi pertama Mendapatkan menyingkirkan masalah tepi oleh padding nol di sekitar array, tapi solusi kedua diposting di sini menangani dengan cara yang sulit dan langsung :) lapis ya, tapi katakanlah Anda menggunakan metode cumsum pada tick pertama dan menyimpan array rata-rata rolling Anda untuk Kutu berikutnya Setiap tanda centang setelah itu Anda hanya perlu menambahkan nilai rata-rata bergerak terbaru ke array bergulir Anda di tempat penyimpanan. Dengan menggunakan metode ini, Anda tidak menghitung ulang hal-hal yang telah Anda perhitungkan: Pada tick pertama Anda menyimpulkan setelah itu Anda hanya menambahkan kuota elemen periode terakhir yang lebih cepat 2x untuk semua kutu berikutnya. Ndash litepresence 10 Jun 16 at 12:29 Jika Anda memilih untuk menggulung sendiri, daripada menggunakan perpustakaan yang ada, harap sadar akan kesalahan floating point dan cobalah untuk meminimalkan pengaruhnya: Jika semua nilai Anda kira-kira sama dengan besarnya , Maka ini akan membantu melestarikan presisi dengan selalu menambahkan nilai dengan besaran yang kira-kira sama. Dalam kalimat terakhir saya, saya mencoba untuk menunjukkan mengapa hal itu membantu kesalahan floating point. Jika dua nilai kira-kira memiliki urutan besaran yang sama, maka menambahkannya kurang presisi daripada jika Anda menambahkan jumlah yang sangat besar ke angka yang sangat kecil. Kode ini menggabungkan nilai kuotajacentquot dengan cara yang bahkan jumlah antara harus selalu cukup dekat besarnya, untuk meminimalkan kesalahan floating point. Tidak ada bukti bodoh, tapi metode ini telah menyelamatkan beberapa proyek yang diimplementasikan dengan sangat buruk. Ndash Mayur Patel 15 Desember pukul 17:22 Alleo: Alih-alih melakukan satu penambahan per nilai, Anda akan melakukan dua hal. Buktinya sama dengan masalah bit flipping. Namun, intinya jawaban ini belum tentu kinerjanya, tapi presisi. Penggunaan memori untuk rata-rata nilai 64-bit tidak akan melebihi 64 elemen dalam cache, jadi juga ramah dalam penggunaan memori. Ndash Mayur Patel Dec 29 14 at 17: 04Kami sebelumnya memperkenalkan cara membuat moving averages menggunakan python. Tutorial ini akan menjadi kelanjutan dari topik ini. Rata-rata bergerak dalam konteks statistik, juga disebut rata-rata rollingrunning, adalah jenis respon impuls yang terbatas. Dalam tutorial kami sebelumnya, kami telah merencanakan nilai dari array x dan y: plot Let8217 x terhadap rata-rata bergerak dari y yang akan kita hubungi yMA: Pertama, mari menyamakan panjang kedua susunan: Dan untuk menunjukkan ini dalam konteks: Hasilnya Grafik: Untuk membantu memahami hal ini, mari plot plot dua hubungan yang berbeda: x vs y dan x vs MAy: Rata-rata bergerak di sini adalah petak hijau yang dimulai pada 3: Bagikan ini: Seperti ini: Posting navigasi Tinggalkan Balasan Batalkan balasan Sangat berguna Saya Ingin membaca bagian terakhir pada kumpulan data yang besar Berharap itu akan datang segera8230 d blogger seperti ini:

No comments:

Post a Comment