🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.python
5 messages
5 total messages Started by Mateusz Papiernik Thu, 09 Dec 2010 14:14
Obcięcie w tablicy NumPy początkowych wartości poniżej pewnego poziomu
#27841
Author: Mateusz Papiernik
Date: Thu, 09 Dec 2010 14:14
37 lines
2139 bytes
Cześć!

Pytanie raczej z serii tych mało ambitnych, ale już jakiś czas się z tym
borykam i rozwiązanie, jeśli jest, musi być pod latarnią - bo nie widzę.

Mam tablicę numpy (numpy.ndarray) wypełnioną wartościami rzeczywistymi.
Chcę obciąć z jej początku (i tylko z początku - nie z końca i nie
wewnątrz) wartości, które różnią się od zera o mniej niż pewien poziom

#v+
def trim_input(data, threshold):
    start = 0

    for d in data:
        if np.abs(d) < threshold:
            start = start + 1

    return data[start:]
#v-

Problem w tym, ze to rozwiazanie jest koszmarnie wolne - a patrzac na
nie mam wrazenie, ze czegos nie dostrzegam, bo eleganckie tez nie jest.

Gdyby chodzil o zera, a nie wartosci bliskie zeru, numpy ma wlasna
metode trim(). Najprawdopodobniej gdybym chcial wyciac wszystkie
wartosci ponizej pewnego poziomu, jakis filtr górnoprzepustowy tez by
sie znalazl.

Bylbym bardzo wdzieczny za wskazowki, gdzie szukac i jak podejsc do
rozwiazania tego problemu.


Pozdrawiam!
-- 
Mateusz Papiernik
mati@maticomp.net, http://www.maticomp.net
"One man can make a difference" - Wilton Knight
Re: Obcięcie w tablicy NumPy początkowych wartości poniżej pewnego poziomu
#27842
Author: Karol
Date: Thu, 09 Dec 2010 18:15
14 lines
1500 bytes
Możesz tę pętle zakończyć po znalezieniu odpowiedniego indeksu:

def trim_input(data, threshold):
    start = 0

    for d in data:
        if np.abs(d) < threshold:
            start = start + 1
        else:
            break

    return data[start:]

- Karol
Re: Obcięcie w tablicy NumPy początkowych wartości poniżej pewnego poziomu
#27845
Author: Karol
Date: Thu, 09 Dec 2010 18:15
14 lines
1499 bytes
Możesz tę pętle zakończyć po znalezieniu odpowiedniego indeksu:

def trim_input(data, threshold):
    start = 0

    for d in data:
        if np.abs(d) < threshold:
            start = start + 1
        else:
            break

    return data[start:]

- Karol
Re: Obcięcie w tablicy NumPy początkowych wartości poniżej pewnego poziomu
#27843
Author: Karol
Date: Thu, 09 Dec 2010 18:37
8 lines
1620 bytes
Zapomniałem dodać, że można to też zrobić krótko:

data[(data>threshold).argmax():]

ale dla dużych list niekoniecznie będzie to szybszy niż znalezienie
tego pierwszego indeksu w pętli.

- Karol
Re: Obcięcie w tablicy NumPy początkowych wartości poniżej pewnego poziomu
#27844
Author: Mateusz Papiernik
Date: Thu, 09 Dec 2010 18:41
21 lines
1894 bytes
W dniu 2010-12-09 19:37, Karol pisze:
> Zapomniałem dodać, że można to też zrobić krótko:
> 
> data[(data>threshold).argmax():]
> 
> ale dla dużych list niekoniecznie będzie to szybszy niż znalezienie
> tego pierwszego indeksu w pętli.

Nie jest, to juz sprawdzilem.

Ale dzieki wielkie za wskazowke z wyjsciem z petli - nie mam pojecia jak
mi tak oczywisty blad w kodzie uciekl. Teraz wszystko jasne, dlaczego to
tak dlugo trwalo...

Nauczka: nie pisac kodu w srodku nocy po poprzedniej nocy bez snu, eh.


-- 
Mateusz Papiernik
mati@maticomp.net, http://www.maticomp.net
"One man can make a difference" - Wilton Knight
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads