2016-02-09 15 views
5
training_images = np.array([i for i in images if i not in validation_images]) 

Powyższe informacje są błędne (jak zaznaczono w komentarzu poniżej). Jaki jest prawidłowy i szybszy sposób robienia tego?Węzeł numpy wyklucza niektóre elementy

Moi validation_images tylko

validation_images = images[::6] 

i kształt obrazów jest (60000, 784). To jest tablica numpy.

Obecna metoda jest niedopuszczalna, ponieważ jest zbyt wolna.

+0

Uwaga: ["w" dla tablic nie ma sensu] (http://stackoverflow.com/questions/18320624/how-does-contains-work-for-ndarrays), więc Twój obecny kod prawdopodobnie nie działa czegokolwiek chcesz. W jaki sposób duplikaty powinny mieć na to wpływ? Czy chcesz po prostu upuścić każdy wiersz, którego indeks jest wielokrotnością liczby 6? – user2357112

+0

Nie wiedziałem o tym. Ale w każdym razie chcę zrobić to, co zamierzałem tam zrobić. Tak, nie dbam o duplikaty, chcę po prostu upuścić jeden wiersz co 6 wierszy dla mojego zestawu sprawdzania poprawności. –

Odpowiedz

4

mam zawsze przy użyciu boolean masks na takie rzeczy, można rozważyć:

# Mask every sixth row 
mask = (np.arange(images.shape[0]) % 6) != 0 

# Only use the not masked images 
training_images = images[mask] 

Zestaw walidacja będzie wówczas każdy zamaskowany elementem:

validation_images = images[~mask] 

operacje matematyczne na macierzach NumPy element pracy jest mądry, więc wykonanie modulo (%) zostanie wykonane na każdym elemencie i zwróci inną tablicę o tym samym kształcie. The != 0 działa również elementowo i porównuje, jeśli modulo nie jest zero. Tak więc maska ​​jest po prostu tablicą zawierającą False, gdzie wartość nie jest równa int * 6 i True gdzie jest.

+0

np.arange (images.shape [0]) daje ci tablicę, dlaczego możesz to zrobić (THIS% 6)! = 0? Co tam robisz i dlaczego to działa? Możesz to wyjaśnić? –

+0

I wydaje się, że to działa, przy okazji! –

+0

Edytowałem na końcu mały tekst wyjaśniający kontekst operacji. – MSeifert

Powiązane problemy