У меня есть рабочий код, но мне интересно, есть ли для него реализация numpy
. Это больше для удовлетворения моего любопытства, а также для оптимизации и улучшения кода; У меня нет острой проблемы. Тем не менее, я предполагаю, что эта ситуация достаточно распространена, чтобы быть интересной для других, а не только для меня.
Итак, ситуация: я вычисляю значение много раз в al oop и хотел бы только сохранить минимальное и максимальное значение.
Изначально я использовал
import numpy as np
vals = []
for obj in objects:
#...do stuff...
vals.append(obj.calc_value())
#...do more stuff
minmax = [np.min(vals), np.max(vals)]
, который работает и хорош и короток. Однако, поскольку я храню всех значений, но мне нужны только минимальное и максимальное значения, это кажется пустой тратой памяти. Поэтому я изменил его на
import numpy as np
minmax = [np.inf, -np.inf]
for obj in objects:
#...do stuff...
val = obj.calc_value()
if val < minmax[0]:
minmax[0] = val
if val > minmax[1]:
minmax[1] = val
#...do more stuff
, который также работает, но немного многословно. Конечно, я мог бы выделить четыре строки кода в функцию, я думаю, но ...
Я не мог не задаться вопросом, не существует ли для этого numpy
функция. Что-то вроде «обратной» clip
функции. Функция, которая, подобно clip
, сравнивает значение с интервалом. Но который не возвращает (возможно, измененное) значение, так что оно лежит в предоставленном интервале (что и делает clip
), а скорее возвращает (возможно, расширенный) интервал, который необходим, чтобы предоставленное значение лежало в нем.
import numpy as np
minmax = [np.inf, -np.inf]
for obj in objects:
#...do stuff...
minmax = np.reverse_clip(minmax, obj.calc_value())
#...do more stuff
Если есть, я бы хотел услышать об этом. Кроме того, какие-нибудь идеи, как я мог найти это, не спрашивая здесь? Я посмотрел на numpy
методы массива, но не смог найти его там.