2016-01-22 11 views
6

Ich habe zwei verschiedene numpy Arrays gegeben. Erstens ist ein zweidimensionales Array, das wie (ersten zehn Punkte) aussieht:Kreuzung von zwei numply Arrays von verschiedenen Dimensionen von Spalte

[[ 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]] 

das zweite Array ist nur eindimensional, die wie (ersten zehn Punkte) aussieht:

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

Werte aus dem Die zweite (eindimensionale) Anordnung könnte in der ersten (zweidimensionalen) ersten in der ersten Spalte auftreten. F. e. 17.64705882

Ich möchte ein Array aus dem zweidimensionalen erhalten, in dem die Werte der ersten Spalte mit den Werten im zweiten (eindimensionalen) Array übereinstimmen. Wie geht das?

Antwort

5

Sie können np.in1d(array1, array2) verwenden, um in array1 jeden Wert von array2 zu suchen. In Ihrem Fall, dass Sie nur die erste Spalte der ersten Reihe nehmen müssen:

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

Sie diese Maske können die aufgetretenen Werte zu erhalten:

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

Die üblichen Vorsichtsmaßnahmen mit Floating-Point-Gleichheit Tests gelten, z.B '.1 + .1 + .1 == .3' wird zu' False' ausgewertet. Wenn also die Werte nicht wirklich gleich sind, und nicht einfach äquivalent in der Nicht-Gleitkomma-Arithmetik, können Dinge sehr falsch laufen. – Jaime

+0

@Jaime großer Kommentar. Weißt du, ob sie einen 'Toleranz'-Parameter zu 'np.in1d' hinzufügen wollen? –

+2

Es könnte sinnvoll sein, und für "in1d" scheint es ein gut definiertes Problem zu sein. Ich weiß nicht, dass jemand daran arbeitet, aber Pull-Anfragen sind immer willkommen! ;-) – Jaime

Verwandte Themen