2016-04-04 10 views
0

Ich habe ein 1D-Array und indem ich ein Histogramm aufzeichnen und es durch eine Gaußsche anpassen Ich möchte eine Signal-Rausch-Karte erstellen (mit einer Sigma-Skala von meinem Gaußschen). Ich habe den Wert 0 an mehreren Stellen, aber ich möchte nur die Werte < 0 und> 0 behalten.Entfernen Sie einen Wert von 1D-Array

Kann ich mein Skript so schreiben?

new_SN_map = temp_SN_map[(temp2_SN_map < 0) & (temp_SN_map > 0)] 

Gibt es eine Möglichkeit, den Wert 0 automatisch zu löschen?

Antwort

2

Für zukünftige Leser werde ich Ihren Array umbenennen, um es allgemeiner zu machen:

array = temp_SN_map 

In Bezug auf Ihr Problem, gibt es verschiedene Möglichkeiten. Für den Anfang wäre Ihr Vorschlag arbeiten:

new_array = array[(array < 0) & (array > 0)] 

Aber es gibt Alternativen:

new_array = array[array != 0]  # using only one comparison 

new_array = array[np.nonzero(array)] # using np.nonzero 

new_array = array[np.where(array)] # using np.where 
  • Mit np.nonzero()1 speziell für den Ausschluss nicht-Null-Werte abgestimmt ist.

  • Mit np.where()2 oder != 0 sind einen besonderen Wert für den Ausschluss.

  • Verwenden Sie a < 0 & a > 0 ist gut, wenn Sie einen bestimmten Bereich ausschließen möchten.

Hinweis jedoch, dass jeder von denen, kann alles, was die anderen so tun, hängt es primär auf das, was Sie denken, ist am besten geeignet/lesbar oder wenn Sie Effizienz kümmern müssen Sie es Zeit, was am schnellsten.

+0

Ich habe eine Frage, die weiter geht. Angenommen, ich habe ein 2D-Array. Warum wird das 2D-Array zu 1D-Array, wenn ich diesen Prozess anwende? – Deadpool

+0

da numpy nur 2D-Arrays mit Lücken verarbeiten kann, muss ** sie ** in 1D konvertieren. Sie können auch 'np.mgrid' oder' np.ogrid' verwenden, um die Koordinateninformationen beizubehalten. – MSeifert

1
foo is your 1D numpy array. 

foo[np.where(foo != 0)] 
Verwandte Themen