2016-01-22 44 views
6

Mam dwie różne pomiary numpy. Pierwszym z nich jest dwuwymiarowa tablica, która wygląda (pierwszych dziesięciu punktów):Przecięcie dwóch niewidocznych tablic o różnych wymiarach według kolumny

[[ 0.   0.  ] 
[ 12.54901961 18.03921569] 
[ 13.7254902 17.64705882] 
[ 14.11764706 17.25490196] 
[ 14.90196078 17.25490196] 
[ 14.50980392 17.64705882] 
[ 14.11764706 17.64705882] 
[ 14.50980392 17.25490196] 
[ 17.64705882 18.03921569] 
[ 21.17647059 34.11764706]] 

druga tablica jest tylko jednowymiarowy która wygląda (pierwszych dziesięciu punktów):

[ 18.03921569 17.64705882 17.25490196 17.25490196 17.64705882 
    17.64705882 17.25490196 17.64705882 21.17647059 22.35294118] 

wartości z druga (jednowymiarowa) tablica może wystąpić w pierwszej (dwuwymiarowej) tablicy w pierwszej kolumnie. F.e. 17.64705882

Chcę uzyskać tablicę z wymiaru dwuwymiarowego, w którym wartości pierwszej kolumny odpowiadają wartościom z drugiej (jednowymiarowej) tablicy. Jak to zrobić?

Odpowiedz

5

Możesz użyć np.in1d(array1, array2) do wyszukiwania w array1 każdej wartości array2. W twoim przypadku po prostu trzeba wziąć pierwszej kolumnie pierwszej tablicy:

mask = np.in1d(a[:, 0], b) 
#array([False, False, False, False, False, False, False, False, True, True], dtype=bool) 

Można używać tej maski do uzyskania napotkanych wartości:

a[:, 0][mask] 
#array([ 17.64705882, 21.17647059]) 
+2

zwykłe środki ostrożności ze zmiennym testowania równości punkcie stosuje się, na przykład '.1 + .1 + .1 == .3' zwraca wartość" Fałsz ", więc jeśli wartości nie są naprawdę równe, nie są po prostu równorzędne w arytmetykach o nie zmiennoprzecinkowych, rzeczy mogą pójść bardzo źle. – Jaime

+0

@Jaime świetny komentarz. Czy wiesz, czy mają plany dodania parametru 'tolerancji' do' np.in1d'? –

+2

To może mieć sens, a dla 'in1d' wydaje się być dobrze zdefiniowanym problemem. Nie wiem, czy ktokolwiek nad tym pracuje, ale prośby o ściągnięcie są zawsze mile widziane! ;-) – Jaime