Seite 1 von 1

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

Verfasst: Montag 19. März 2018, 11:11
von LuSch
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?

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

Verfasst: Montag 19. März 2018, 11:19
von Sirius3
@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:])