Stellen in Array finden, die Bedingung bzgl. vorheriger Stellen erfüllen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
LuSch
User
Beiträge: 1
Registriert: Montag 19. März 2018, 10:17

Hallo zusammen,
Am Titel meiner Frage seht ihr bestimmt schon, dass ih nicht besonders geübt im Programmieren bin. Ich habe eine Frage, die wahrscheinlich ziemlich einfach zu beantworten ist.
Ich habe ein numpy array mit vielen "nan" und ein paar "-1" und "1".
Ich möchte alle stellen finden, in denen nicht "nan" steht, aber in dre Stellen vorher und zwei Stellen danach "nan" steht.

z.B.:
Das array könnte so aussehen: [ nan nan nan nan -1 nan 1 nan nan nan nan -1 nan nan nan nan ]
Jetzt suche ich die Stelle, die nicht nan ist aber von nans umgeben ist und zwar drei Stellen vorher und zwei Stellen danach.
Hier wäre die Antwort also 11

In meinem Fall gibt es mehrere dieser Stellen und ich hätte alle Stellen gerne in einer Liste oder einem numpy array ausgegeben.
Ich könnte ein loop machen in der Form

Code: Alles auswählen

stelle = []
For i in np.arange(3,len(a)-3):
	if a[i] not np.isnan(a[i]) and np.all(np.isnan(a[i-3:i])) and np.all(np.isnan(a[i+1:i+3])):
		stelle.append(i)
Aber das kann man bestimmt viel schöner lösen, oder?
Sirius3
User
Beiträge: 17746
Registriert: Sonntag 21. Oktober 2012, 17:20

@LuSch: `a not np.isnan(a)` ist kein gültiges Python. Und genau das, was Du hier als Schleife hast, kann man als Vektoroperationen auch schreiben.

Code: Alles auswählen

~np.isnan(a[3:-2]) & np.isnan(a[2:-3]) & np.isnan(a[1:-4]) & np.isnan(a[0:-5]) & np.isnan(a[4:-1]) & np.isnan(a[5:])
Antworten