Heute habe ich eine Funktion profiliert und einen (zumindest mir) seltsamen Engpass gefunden: Erstellen eines maskierten Arrays mit mask=None
oder mask=0
um eine Maske zu initialisieren mit allen Nullen, aber die gleiche Form wie die data
ist sehr langsam:Warum erstellt man ein maskiertes numpy array so langsam mit mask = None oder mask = 0
>>> import numpy as np
>>> data = np.ones((100, 100, 100))
>>> %timeit ma_array = np.ma.array(data, mask=None, copy=False)
1 loop, best of 3: 803 ms per loop
>>> %timeit ma_array = np.ma.array(data, mask=0, copy=False)
1 loop, best of 3: 807 ms per loop
auf der anderen Seite mask=False
oder Erstellen der Maske von Hand mit viel schneller:
>>> %timeit ma_array = np.ma.array(data, mask=False, copy=False)
1000 loops, best of 3: 438 µs per loop
>>> %timeit ma_array = np.ma.array(data, mask=np.zeros(data.shape, dtype=bool), copy=False)
1000 loops, best of 3: 453 µs per loop
Warum erhalte None
oder 0
fast 2000 mal langsamer als False
oder als mask
Parameter? Vorausgesetzt, die function docs sagt nur, dass es:
Muss in ein Array von Boolean mit der gleichen Form wie Daten konvertiert werden kann. True gibt eine maskierte (d. H. Ungültige) Daten an.
Ich verwende Python 3.5, numpy 1.11.0 auf 10 Windows-
Haben Sie schon in den numpy Code gegraben? –