Мне нужно работать с историей обучения модели Keras. Это базовая задача, но я измерил производительность встроенной функции Python min(), функции numpy.min() и функции numpy ndarray.min() для list и ndarray. Производительность встроенной функции Python min() ничто по сравнению с производительностью Numpy для ndarray — numpy в 10 раз быстрее (для списка numpy почти в 6 раз медленнее, но в данном вопросе это не так).
Однако метод ndarray.min() почти в два раза быстрее, чем numpy.min(). Документация ndarray.min() относится к документации numpy.amin(), которая, согласно документации numpy.amin, является псевдонимом для numpy.min(). Поэтому я предположил, что numpy.min() и ndarray.min() будут иметь одинаковую производительность. Однако почему производительность этих функций не одинакова?
from timeit import default_timer
import random
a = random.sample(range(1,1000000), 10000)
b = np.array(random.sample(range(1,1000000), 10000))
def time_mgr(func):
tms = []
for i in range(3, 6):
tm = default_timer()
for j in range(10**i):
func()
tm = (default_timer()-tm) / 10**i * 10e6
tms.append(tm)
print(func.__name__, tms)
@time_mgr
def min_list():
min(a)
@time_mgr
def np_min_list():
np.min(a)
@time_mgr
def min_nd():
min(b)
@time_mgr
def np_min_nd():
np.min(b)
@time_mgr
def np_nd_min():
b.min()
вывод, время в мкс:
min_list [520.7690014503896, 515.3326001018286, 516.221239999868]
np_min_list [2977.614998817444, 3009.602500125766, 3014.1312699997798]
min_nd [2270.1649996452034, 2195.6873999442905, 2155.1631700014696]
np_min_nd [22.295000962913033, 21.675399970263243, 22.30485000181943]
np_nd_min [14.261999167501926, 12.929399963468313, 12.935079983435571]
Подробнее здесь: https://stackoverflow.com/questions/782 ... -functions