Tuesday 1 August 2017

Numpy Moving Average Function


Hmmm, nampaknya fungsi pengarsipan yang mudah ini sebenarnya cukup mudah untuk salah dan telah memupuk diskusi yang bagus mengenai efisiensi memori. Saya senang memiliki perut kembung jika itu berarti mengetahui bahwa ada sesuatu yang telah dilakukan dengan benar Richard 20 September pukul 19 23.NumPy Kurangnya fungsi spesifik domain tertentu mungkin karena disiplin Tim Inti dan kesetiaan pada arahan utama NumPy memberikan tipe array N-dimensi dan juga fungsi untuk membuat, dan mengindeks array tersebut Seperti banyak tujuan mendasar, yang satu ini Tidak kecil, dan NumPy melakukannya dengan cemerlang. SciPy yang jauh lebih besar berisi koleksi perpustakaan spesifik domain yang jauh lebih banyak yang disebut subpackages oleh SciPy devs - misalnya optimasi numerik, signal processsing signal, dan integral kalkulus. Saya kira adalah Bahwa fungsi yang Anda cari setidaknya ada di antara subpack SciPy, namun, saya akan melihat dulu koleksi SciPy scikits mengidentifikasi scikit s yang relevan dan mencari Fungsi yang menarik di sana. Scikits adalah paket yang dikembangkan secara independen berdasarkan NumPy SciPy dan diarahkan ke disiplin teknis tertentu misalnya scikits-image scikits-learn etc Beberapa di antaranya adalah khususnya, OpenOpt yang mengagumkan untuk pengoptimalan numerik sangat dihargai, proyek yang matang panjang Sebelum memilih untuk berada di bawah rubrik scikits yang relatif baru Beranda Scikits menyukai daftar di atas sekitar 30 suntikan seperti itu meskipun setidaknya beberapa di antaranya tidak lagi berada dalam pengembangan aktif. Setelah mengikuti saran ini, akan membawa Anda ke scams-timeseries, paket itu tidak Lebih lama dalam perkembangan aktif Akibatnya, Pandas telah menjadi, AFAIK, perpustakaan seri waktu de facto NumPy. Pedia memiliki beberapa fungsi yang dapat digunakan untuk menghitung rata-rata bergerak yang paling sederhana ini mungkin adalah rollingmean yang Anda gunakan seperti sekarang. , Panggil saja fungsi rollingmean yang lewat di objek Seri dan ukuran jendela yang dalam contoh saya di bawah ini adalah 10 hari. Orked - misalnya membandingkan nilai 10 - 15 dalam seri aslinya versus Seri baru yang dihaluskan dengan mean rolling. Fungsi pengguliran, bersamaan dengan sekitar selusin fungsi lainnya dikelompokkan secara informal dalam dokumentasi Pandas di bawah fungsi jendela geser rubrik kedua , Kelompok fungsi yang terkait di Pandas disebut sebagai fungsi tertimbang secara eksponensial misalnya manusia yang menghitung rata-rata tertimbang bergerak secara eksponensial Fakta bahwa kelompok kedua ini tidak termasuk dalam fungsi jendela bergerak pertama mungkin karena transformasi yang tertimbang secara eksponensial bergantung pada Sebuah jendela fixed-length. Dijawab pada 14 Januari 13 di 6 38.I tahu ini adalah pertanyaan lama, tapi inilah solusi yang tidak menggunakan struktur data tambahan atau perpustakaan. Ini sangat linier dalam jumlah elemen dari daftar masukan dan Aku tidak bisa memikirkan cara lain untuk membuatnya lebih efisien sebenarnya jika ada yang tahu cara yang lebih baik untuk mengalokasikan hasilnya, tolong beritahu saya. TIDAK PERILAKU ini akan jauh lebih cepat dengan menggunakan numpy arr Bukan daftar, tapi saya ingin menghilangkan semua dependensi Ini juga memungkinkan untuk meningkatkan kinerja dengan eksekusi multi-threaded. Fungsi mengasumsikan bahwa daftar masukan satu dimensi, jadi hati-hati. Solusi yang lebih efisien telah diajukan oleh Alleo dan jasaarim. Anda dapat menggunakannya untuk itu. Argumen mode menentukan bagaimana menangani tepinya saya memilih mode yang valid di sini karena menurut saya seberapa banyak orang mengharapkan berjalan dengan baik, tapi Anda mungkin memiliki prioritas lain Berikut adalah plot yang Mengilustrasikan perbedaan antara mode. Dijawab 24 Mar 14 at 22 01.Saya suka solusi ini karena bersih satu baris dan kerja yang relatif efisien dilakukan di dalam belitan Tapi solusi Hemat Alleo menggunakan memiliki kompleksitas yang lebih baik Ulrich Stern 25 Sep 25 di 0 31. 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 1 N Implementasi numpy dari convolve mencakup transien awal, jadi Anda harus menghapus titik N-1 yang pertama. Pada mesin saya, versi cepat 20-30 kali lebih cepat, tergantung pada panjang vektor input dan ukuran jendela rata-rata..Catatan yang berputar tidak termasuk mode yang sama yang sepertinya harus mengatasi masalah transien awal, tapi memecahnya antara awal dan akhir. Hal ini menghilangkan sementara dari akhir, dan awalnya tidak memilikinya. Well, saya kira itu Sebagai soal prioritas, saya tidak memerlukan jumlah hasil yang sama dengan mengorbankan kemiringan menuju nol yang tidak ada di data BTW, berikut adalah perintah untuk menunjukkan perbedaan antara mode mode penuh, sama, plot yang valid. Menggabungkan yang 200,, yang 50, 50, mode m untuk m dalam mode axis -10, 251, - 1, 1 1 mode legenda, loc lower center dengan pyplot dan numpy import lapis Mar 24 14 at 13 56.pandas lebih cocok Untuk ini daripada NumPy atau SciPy Its fungsi rollingmean melakukan pekerjaan yang nyaman Ly Ini juga mengembalikan array NumPy ketika inputnya adalah array. Sulit untuk mengalahkan kinerja rolling dalam kinerja dengan implementasi Python custom murni Berikut adalah contoh kinerja terhadap dua solusi yang diajukan. Ada juga pilihan bagus mengenai bagaimana menangani Dengan nilai-nilai edge. Saya selalu kesal dengan fungsi pemrosesan sinyal yang mengembalikan sinyal keluaran dengan bentuk yang berbeda dari pada sinyal input ketika input dan output sama-sama bersifat baik, misalnya kedua sinyal temporal. Ini memecahkan korespondensi dengan variabel independen terkait misalnya waktu, frekuensi Membuat rencana atau perbandingan bukan masalah langsung, jika Anda berbagi perasaan, Anda mungkin ingin mengubah baris terakhir dari fungsi yang diusulkan sebagai kembalinya yang sama dari jendela ke belakang pada 19 56.A 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 dan juga memperlakukan lebih lanjut, bahwa itu juga Kembali sampel sinyal pada titik-titik spasial linear Sesuaikan kode di akan untuk mendapatkan fitur lainnya. Alamat ini adalah perkalian matriks sederhana dengan kernel Gaussian normal. 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 yang sederhana, hasilnya tertinggal di belakang data yang mereka terapkan pada saya bahwa berpikir bahwa berurusan dengan kasus tepi lebih Cara yang memuaskan dari pada mode NumPy yang sama dan lengkap 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 ukuran penuh Jendela 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 adalah detail implementasi. Ini relatif lambat. Karena menggunakan konvolve dan kemungkinan besar bisa dirapikan cukup banyak oleh Pythonista sejati, namun, saya percaya bahwa ide itu berdiri. Diberikan Jan 2 pada 0 28. bagus tapi lambat saat lebar jendela tumbuh besar Beberapa jawaban memberikan algoritme yang lebih efisien. Dengan tapi sepertinya tidak mampu menangani nilai-nilai tepi saya sendiri sudah menerapkan algoritma yang bisa menangani masalah ini dengan baik, jika masalah ini dideklarasikan sebagai. Parameter masukan mergenum bisa dianggap sebagai 2 windowwidth 1.Saya tahu kode ini sedikit tidak terbaca jika kamu Merasa berguna dan menginginkan beberapa expanations, tolong beritahu saya dan saya akan memperbarui jawaban ini Karena menulis sebuah penjelasan mungkin menghabiskan banyak waktu, semoga saya melakukannya hanya jika seseorang membutuhkannya Maafkan saya karena kemalasan saya. Tertarik pada versi aslinya. Ini bahkan lebih tidak terbaca solusi pertama menyingkirkan masalah tepi dengan menurunkan angka di sekitar array, namun solusi kedua yang diposting di sini menanganinya dengan cara yang sulit dan langsung. Pada kalimat terakhir saya, saya mencoba menunjukkannya. E mengapa membantu kesalahan floating point Jika dua nilai kira-kira memiliki urutan besaran yang sama, maka tambahkanlah dengan presisi lebih rendah daripada jika Anda menambahkan angka yang sangat besar ke huruf yang sangat kecil. Kode tersebut menggabungkan nilai yang berdekatan dengan cara yang bahkan harus dilakukan oleh jumlah antara 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 dalam produksi Mayur Patel pada 15 Desember 14 di 17 22. Alleo Alih-alih melakukan satu penambahan per nilai, Anda akan Lakukan dua buktinya sama dengan masalah bit flipping Namun, intinya jawaban ini belum tentu performa, namun ketepatan penggunaan memori untuk rata-rata nilai 64-bit tidak akan melebihi 64 elemen dalam cache, jadi ramah sekali. Penggunaan memori juga Mayur Patel Dec 29 14 pada 17 04. Contoh berikut menghasilkan rata-rata bergerak dari nilai WINDOW sebelumnya Kami memotong nilai WINDOW -1 pertama karena kita tidak dapat menemukan rata-rata sebelum t Hem Perilaku default untuk konvolusi adalah mengasumsikan bahwa nilai sebelum permulaan urutan kita adalah 0 Secara lebih formal, kita membuat urutan y untuk urutan x dimana yi xi xi 1 xin n. Ini menggunakan fungsi konvolusi numpy. Ini adalah Tujuan umum operasi rata-rata bergerak. Menimbang bobot membuat beberapa nilai lebih penting mengimbangi dengan tepat memungkinkan Anda untuk melihat rata-rata seperti sekitar titik daripada sebelum titik. Dari pada memotong nilai, kita dapat memperbaiki nilai awal yang ada, seperti yang digambarkan pada contoh ini.

No comments:

Post a Comment