Ответ 1
Как отметил @Alok, это, по-видимому, вызвано денормальными номерами, влияющими на производительность. Я запустил его в своей OSX-системе и подтвердил эту проблему. Я не знаю, как сбросить денормалы до нуля в numpy. Я попытался бы обойти эту проблему в алгоритме, избегая очень маленьких чисел: действительно ли вам нужно делить y
, пока он не опустится до уровня 1.e-324
?
Если вы избегаете низких чисел, например. добавив следующую строку в ваш цикл:
y += 1e-100
тогда у вас будет постоянное время на итерацию (хотя и медленнее из-за дополнительной операции). Другим обходным решением является использование арифметики с более высокой точностью, например.
x = rand.normal(size=(300,50000)).astype('longdouble')
y = rand.normal(size=(300,50000)).astype('longdouble')
Это сделает каждый из ваших шагов более дорогим, но каждый шаг займет примерно одно и то же время.
См. следующее сравнение в моей системе: