Skip to main content

Numpy moving average convolve


Piszę funkcję średniej ruchomej, która używa funkcji convolve w numpy, która powinna być równoważna (ważonej średniej ruchomej). Gdy wszystkie moje wagi są równe (jak w prostej średniej arytmetycznej), to działa dobrze: jednak, gdy próbuję użyć średniej ważonej zamiast (dla tych samych danych) 3.667,4.667,5.667,6.667. Oczekuję, że dostanę Jeśli usunie poprawną flagę, nie zobaczę nawet poprawnych wartości. Naprawdę chciałbym użyć convolve dla WMA, jak również dla MA, ponieważ sprawia, że ​​kod jest czystszy (ten sam kod, różne gramatury), a poza tym myślę, że muszę przeglądać wszystkie dane i robić plasterki. Wszelkie pomysły na temat tego zachowania Poprzednio wprowadziliśmy sposób tworzenia ruchomych średnich za pomocą Pythona. Ten samouczek będzie kontynuacją tego tematu. Średnia ruchoma w kontekście statystyki, zwana także średnią walcową, jest rodzajem skończonej odpowiedzi impulsowej. W naszym poprzednim tutorialu narysowaliśmy wartości tablic x i y: Let8217s wykres x względem średniej kroczącej y, którą nazwiemy yMA: Po pierwsze, let8217s wyrównują długość obu tablic: I aby pokazać to w kontekście: Wynik graph: Aby to zrozumieć, let8217s kreślą dwie różne relacje: x vs y i x vs MAy: Średnia ruchoma tutaj to zielony wykres, który zaczyna się od 3: Udostępnij to: Tak jak to: Nawigacja po wpisie Pozostaw odpowiedź Anuluj odpowiedź Bardzo przydatny I Chciałbym przeczytać ostatnią część na dużych zestawach danych Mam nadzieję, że wkrótce nadejdzie8230 d blogerów takich jak to: Wiem, że to stare pytanie, ale tutaj jest rozwiązanie, które nie wykorzystuje żadnych dodatkowych struktur danych lub bibliotek. Jest on liniowy pod względem liczby elementów listy wejściowej i nie mogę wymyślić żadnego innego sposobu, aby uczynić go bardziej wydajnym (tak naprawdę, jeśli ktoś wie o lepszym sposobie przydzielania wyniku, proszę dać mi znać). UWAGA: byłoby to znacznie szybsze przy użyciu tablicy numpy zamiast listy, ale chciałem wyeliminować wszystkie zależności. Możliwe byłoby również zwiększenie wydajności poprzez wykonywanie wielowątkowe. Funkcja zakłada, że ​​lista wejściowa jest jednowymiarowa, więc należy zachować ostrożność. UPD: bardziej wydajne rozwiązania zostały zaproponowane przez Alleo i jasaarim. Możesz użyć np. convolve do tego: argument mode określa sposób obsługi krawędzi. Wybrałem prawidłowy tryb tutaj, ponieważ uważam, że większość ludzi spodziewa się, że bieganie będzie działać, ale możesz mieć inne priorytety. Oto wykres, który ilustruje różnicę między trybami: Odpowiedź 24 Mar 14 o 22:01 Podoba mi się to rozwiązanie, ponieważ jest czyste (jedna linia) i stosunkowo wydajne (praca wykonana wewnątrz numpy). Ale Alemo39s quotEfficient solutionquot używa numpy. cumsum ma lepszą złożoność. ndash Ulrich Stern Sep 25 15 o 0:31 Możesz obliczyć średnią bieżącą z: Na szczęście numpy zawiera funkcję convolve, której możemy użyć, aby przyspieszyć działanie. Średni bieg jest równoważny zawijaniu x z wektorem, który jest długi N, z wszystkimi członami równymi 1N. Niska implementacja convolve obejmuje początkowy stan przejściowy, więc musisz usunąć pierwsze punkty N-1: W mojej maszynie szybka wersja jest 20-30 razy szybsza, w zależności od długości wektora wejściowego i wielkości okna uśredniania . Zauważ, że convolve zawiera ten sam tryb, który wydaje się odpowiadać początkowemu problemowi przejściowemu, ale dzieli go od początku do końca. Usuwa przemijanie z końca, a początek go nie ma. Cóż, myślę, że to kwestia priorytetów, nie potrzebuję takiej samej liczby wyników kosztem uzyskania nachylenia w kierunku zera, którego nie ma w danych. BTW, tutaj jest polecenie pokazujące różnicę między trybami: tryby (39full39, 39same39, 39valid39) wykres (convolve (ones ((200,)), ones ((50,)) 4750, modem)) dla m w trybach legenda osi (-10, 251, -1, 1.1) (tryby, loc39lower center39) (importowany z Pyplot i numpy). ndash lapis Mar 24 14 o 13:56 pandy są bardziej odpowiednie do tego niż NumPy lub SciPy. Jego funkcja rollingmean wygodnie wykonuje pracę. Zwraca także tablicę NumPy, gdy wejście jest tablicą. Trudno jest pokonać walkę maszynową w wydajności z dowolną niestandardową implementacją Pythona. Oto przykład wykonania przeciwko dwóm z proponowanych rozwiązań: Istnieją również fajne opcje dotyczące radzenia sobie z wartościami krawędzi. Zawsze denerwuje funkcja przetwarzania sygnału, która zwraca sygnały wyjściowe o różnych kształtach niż sygnały wejściowe, gdy oba wejścia i wyjścia mają ten sam charakter (na przykład oba sygnały czasowe). Przerywa korespondencję z powiązaną zmienną niezależną (na przykład czas, częstotliwość), co powoduje, że tworzenie wykresów lub porównywanie nie jest bezpośrednią sprawą. tak czy inaczej, jeśli podzielasz uczucia, możesz chcieć zmienić ostatnie wiersze proponowanej funkcji jako ynp. convolve (ww. sum (), s, mode39same39) return ywindowlen-1 :-( windowlen-1) ndash Christian O39Reilly Aug 25 15 o 19:56 Trochę za późno na imprezę, ale stworzyłem własną małą funkcję, która NIE owija końce lub klocki zerami, które są następnie używane do znalezienia średniej. Kolejną zaletą jest to, że ponownie pobiera próbki w liniowo rozmieszczonych punktach. Dostosuj kod w dowolnym momencie, aby uzyskać dostęp do innych funkcji. Metoda polega na prostym mnożeniu macierzy ze znormalizowanym jądrem Gaussa. Proste użycie na sinusoidalnym sygnale z dodatkowym normalnym szumem rozproszonym: To pytanie jest teraz jeszcze starsze niż wtedy, gdy NeXuS pisał o tym w zeszłym miesiącu, ale LUBIĘ, jak jego kod radzi sobie z przypadkami krańcowymi. Ponieważ jednak jest to prosta średnia ruchoma, jej wyniki pozostają w tyle za danymi, do których się odnoszą. Pomyślałem, że radzenie sobie z przypadkami brzegowymi jest bardziej satysfakcjonujące niż tryby NumPys. podobnie. i pełne można osiągnąć, stosując podobne podejście do metody opartej na splataniu (). Mój wkład wykorzystuje średnią centralną, aby dopasować wyniki do ich danych. Kiedy dostępne są dwa punkty dla pełnowymiarowego okna, średnie są obliczane z kolejnych mniejszych okien na krawędziach tablicy. Właściwie z coraz większych okien, ale to jest szczegół implementacji. Jest względnie powolny, ponieważ używa convolve (). i może być dość spoufalony przez prawdziwą Pythonistę, jednak uważam, że ten pomysł stoi. odpowiedział 2 stycznia na 0:28 np. convolve jest ładne, ale powolne, gdy szerokość okna rośnie duży. Niektóre odpowiedzi zapewniają bardziej skuteczne algorytmy z np. cumsum, ale wydają się niezdolne do obsługi wartości krawędzi. Sam zaimplementowałem algorytm, który dobrze poradzi sobie z tym problemem, jeśli ten problem zostanie zadeklarowany jako: parametr wejściowy mergenum może być uważany za 2 szerokość okna 1. Wiem, że ten kod jest trochę nieczytelny, jeśli uważasz, że jest on przydatny i chcesz trochę rozszerzeń, proszę daj mi znać i zaktualizuję tę odpowiedź. (Ponieważ napisanie wyjaśnienia może mnie kosztować dużo czasu, mam nadzieję, że zrobię to tylko wtedy, gdy ktoś tego potrzebuje, proszę wybacz mi moje lenistwo :)) Jeśli interesuje Cię tylko jego oryginalna wersja: jest jeszcze bardziej nieczytelna: pierwsze rozwiązanie pozbywa się problemu z krawędzią poprzez dopełnianie zer wokół tablicy, ale drugie rozwiązanie tutaj zamieszczone obsługuje je w sposób trudny i bezpośredni :) lapis tak, ale powiedzmy, że używasz metody cumsum na pierwszym tiku i zapisujesz swoją średnią kroczącą tablicę dla następny tyk. po każdym teście musisz po prostu dodać ostatnią średnią ruchomą wartość do macierzy walcowniczej w pamięci. Korzystając z tej metody, nie przeliczasz już obliczonych rzeczy: Na pierwszym teście po zakończeniu podsumowania po prostu dodajesz wartość ostatnich elementów z ostatnich okresów, która jest 2x szybciej dla wszystkich kolejnych tyknięć. ndash litepresence Jun 10 16 at 12:29 Jeśli zdecydujesz się rzucić własną, zamiast korzystać z istniejącej biblioteki, bądź świadomy błędu zmiennoprzecinkowego i spróbuj zminimalizować jego skutki: Jeśli wszystkie twoje wartości są mniej więcej tego samego rzędu wielkości , to pomoże zachować dokładność, zawsze dodając wartości o zbliżonych wielkościach. W moim ostatnim zdaniu starałem się wskazać, dlaczego pomaga on błędowi zmiennoprzecinkowemu. Jeśli dwie wartości są w przybliżeniu o ten sam rząd wielkości, to dodanie ich traci mniejszą precyzję niż w przypadku dodania bardzo dużej liczby do bardzo małej. Kod łączy wartości sąsiadujące z wartościami w taki sposób, że nawet sumy pośrednie powinny zawsze być w przybliżeniu w wielkości, aby zminimalizować błąd zmiennoprzecinkowy. Nic nie jest głupim dowodem, ale ta metoda uratowała kilka bardzo słabo wdrożonych projektów w produkcji. ndash Mayur Patel 15 grudnia o 17:22 Alleo: Zamiast robić jeden dodatek na wartość, będziesz robić dwa. Dowód jest taki sam jak problem z przerzucaniem bitów. Jednak punktem tej odpowiedzi nie jest koniecznie wydajność, ale precyzja. Wykorzystanie pamięci do uśredniania wartości 64-bitowych nie przekraczałoby 64 elementów w pamięci podręcznej, więc jest przyjazne w użyciu pamięci. ndash Mayur Patel Dec 29 14 o 17:04

Comments

Popular posts from this blog

Forex tester 2 keygen download

Forex Tester v2.9 cracked wersja download Czym jest Forex Tester. Forex Tester jest wyspecjalizowanym oprogramowaniem przeznaczonym wyłącznie do dokładnej symulacji handlu na rynku Forex. Jest to najlepsze narzędzie do szybkiego ulepszania umiejętności handlowych, testowania nowych strategii i budowania zaufania bez ryzykowania prawdziwych pieniędzy. Tester ma ponad 10 lat historycznych danych, które można wykorzystać do przetestowania dowolnej strategii. W zależności od wybranego przedziału czasu można symulować lata handlowe danych w ciągu zaledwie kilku godzin. Jest to niezależny niezależny program, który zawiera własny szeroki wybór wskaźników, w tym średnie kroczące, pasmo Bollingera, MACD, punkty Pivot, Parabolic-SAR, RSI, Stochastic, kanały Keltnera, świece Heiken Ashi i wiele innych. Wybieraj spośród 18 różnych walut do przetestowania, w tym złota i srebra. Jest to także bardzo skuteczne i wydajne narzędzie do testowania Twojej zautomatyzowanej strategii. Wyniki są dokładne i m...

Capital gain employee stock options canada

Maksymalne wykorzystanie opcji na akcje dla pracowników Program opcji na akcje dla pracowników może być lukratywnym instrumentem inwestycyjnym, jeśli będzie odpowiednio zarządzany. Z tego powodu plany te od dawna służyły jako skuteczne narzędzie przyciągania najlepszych menedżerów, aw ostatnich latach stały się popularnym sposobem przyciągania pracowników niewykonawczych. Niestety, niektórzy wciąż nie wykorzystują w pełni pieniędzy wygenerowanych przez pracowników. Zrozumienie charakteru opcji na akcje. Podatki i wpływ na dochody osobiste są kluczem do maksymalizacji tego potencjalnie lukratywnego zysku. Czym jest opcja na akcje dla pracowników Opcja na akcje dla pracowników to umowa wydana przez pracodawcę na pracownika w celu zakupu określonej liczby akcji spółki po ustalonej cenie przez ograniczony okres czasu. Istnieją dwie główne kategorie wydanych opcji na akcje: niekwalifikowane opcje na akcje (NSO) i opcje na akcje motywacyjne (ISO). Niekwalifikowane opcje na akcje różnią się o...

Forex hedge arbitrage ea

Ludzie nie są już odpowiedzialni za to, co dzieje się na rynku, ponieważ komputery podejmują wszystkie decyzje. - Arbitraż Michael Lewis Forex to strategia handlowa o wysokiej częstotliwości, która pozwala inwestorom osiągać stałe zyski, działając szybko na możliwościach, jakie stwarza nieefektywność cenowa pomiędzy brokerami. Łatwe w konfiguracji i nadzorowaniu Brak wskaźników lub trudna analiza Niezbędne transakcje arbitrażowe są niezależne od ram czasowych W idealnych warunkach handlu arbitraż jest strategią bez ryzyka. Arbitraż jest strategią o dużej skali i generuje wiele rabatów. PZ Arbitrage EA ma wiele niesamowitych funkcji: implementuje dwa tryby handlu: klasyczny lub trailing stop EA może handlować 32 równoczesnymi parami lub symbolami EA wprowadza dostosowywany próg obrotu EA dostosowuje się do poślizgów i prowizji EA umieszcza zlecenia bezpieczeństwa SL i TP Działalność handlowa to NFA - Zgodność z FIFO Zwiększaj aktywność handlową dzięki najprostszemu i najbardziej komplet...