Ich habe ein großes numpy Array k
, von unspezifizierter Form, und ich möchte ein identisch geformtes Array d
erstellen, die 1.0 ist, wenn der entsprechende Eintrag in k
zwischen zwei Konstanten lo
ist und hi
, 0,0 sonst. (Aufgrund dessen, was der größere Code tut, das tue ich nicht wollen ein Boolean-Wert von Array.)Der effizienteste Weg (lo <= k && k <= hi)? 1: 0 für ka numpy array, lo, hi Konstanten
Der offensichtliche Weg, dies zu tun ist
d = np.ones_like(k)
d[np.less(k, lo)] = 0
d[np.greater(k, hi)] = 0
jedoch die np.less
und np.greater
Anrufe betreffen die Erstellen von großen Booleschen Scratch-Arrays, und ich habe dies als signifikanten Overhead gemessen. Gibt es eine Möglichkeit, diese Operation auszuführen, bei der keine großen Scratch-Objekte erstellt werden müssen, während vollständig vektorisiert bleibt?
Wenn die großen Scratch-Arrays ein Problem darstellen, das groß genug ist, dass Sie sie loswerden müssen, haben Sie das gleiche Problem mit den meisten üblichen NumPy-Techniken. NumPy baut gerne riesige Scratch-Arrays. – user2357112
Ich glaube nicht, dass es einen Weg gibt, irgendwelche Scratch-Arrays für diese Operation zu vermeiden, wenn man einfach NumPy verwendet. Möglicherweise müssen Sie nach C (benutzerdefinierte ufuncs schreiben), Cython oder Numba suchen. –