Seite 1 von 1
For Schleife ersetzen sinvoll?
Verfasst: Montag 8. Mai 2017, 09:00
von incoggnito
Hallo Zusammen,
ich habe gelesen, dass es sinnvoll sein kann die for-Schleifen durch map zu ersetzen.
Folgende Schleife im Beispiel ersetzt die 1 an Stelle 6 des Vektors durch eine -1.
Code: Alles auswählen
import numpy as np
Index=np.array([0,6])
Vektor=np.array([-1,-1,-1,-1,-1,-1,1,-1]);
for k in range(0,len(Index)):
if Index[-1] < len(Vektor)-1:
if Vektor[Index[k]+1] == -1:
Vektor[Index[k]]=-1
Würdet ihr das anders machen?
Grüße Inco
Re: For Schleife ersetzen sinvoll?
Verfasst: Montag 8. Mai 2017, 09:16
von Sirius3
@incoggnito: in Python iteriert man direkt über ein Array und nicht indirekt mit einem Index
Code: Alles auswählen
import numpy as np
indices = np.array([0,6])
vektor = np.array([-1,-1,-1,-1,-1,-1,1,-1]);
for index in indices:
if vektor[index+1] == -1:
vektor[index] = -1
Dann sollte man bei numpy-Arrays immer schauen, ob eine Vektor-Operation statt einer Schleife möglich ist:
Code: Alles auswählen
import numpy as np
indices = np.array([0,6])
vektor = np.array([-1,-1,-1,-1,-1,-1,1,-1]);
mask = vektor[indices+1] == -1
vektor[indices[mask]] = -1
Re: For Schleife ersetzen sinvoll?
Verfasst: Montag 8. Mai 2017, 09:37
von incoggnito
Hallo Sirius,
danke für deine Hilfe.
Mir ist nur nicht klar wie ich in der Vektorform die Abfrage des Grenzwertes hinbekomme:
Beispiel steht die 1 an letzter Stelle:
Code: Alles auswählen
indices=np.array([1,3,7])
vector=np.array(-1,1,-1,1,-1,-1,-1,1)
Es soll dann nur der letzte 1er ignoritert werden,... alle anderen sollen ersetzt werden. Wird der letzte 1er nicht ignoriert bekomme ich eine Fehlermeldung out of bounds...
In der for-Schleife über k , konnte ich das so abfangen:
grüße
Re: For Schleife ersetzen sinvoll?
Verfasst: Montag 8. Mai 2017, 10:01
von Sirius3
@incoggnito: dann mußt Du halt erst die zu großen Indizes herausnehmen:
Code: Alles auswählen
indices = np.array([1,3,7])
indices = indices[indices + 1 < len(vector)]
Re: For Schleife ersetzen sinvoll?
Verfasst: Montag 8. Mai 2017, 10:48
von incoggnito
Danke, das hat sich gelohnt ... 0,3s Laufzeit verkürzt.