2014-01-22 5 views
2

Я пытался определить временную сложность выполнения numpy.zeros, поэтому я провел следующие тесты. Кажется, он линейный с размером массива, который вы создаете, но в определенный момент существует огромное несоответствие времени, которое требуется. Вот интересные случаи, когда вряд ли изменяет размер массива при всех изменениях времени создания на порядок.Огромная разница во времени при создании numpy.zeros для крошечной разницы в размере массива

python -m timeit -n 1000 -s "import numpy" "numpy.zeros(64500, dtype=float)" 
10000 loops, best of 3: 33.5 usec per loop 


python -m timeit -s "import numpy" "numpy.zeros(65000, dtype=float)" 
1000 loops, best of 3: 418 usec per loop 

Это огромное неравенство! Ниже массива размером 64500 временная сложность примерно линейна с размером массива, а выше массив размером 65000 временная сложность примерно линейна. Почему здесь существует такая ошеломляющая разница во времени?

Я понимаю, что внутри Python хранит все в своей собственной куче. Это происходит потому, что numpy использует C, и он хранит массивы определенного размера в стеке C и массивы другого размера на куче C? Я даже не уверен, что этот вопрос имеет смысл.

Я использую 32-разрядный python 3.3.1 и numpy 1.7.0rc1 на машине Windows 7.

+0

На моей машине (Ubuntu 64 бит и т. Д.) Тайминги почти одинаковы (~ 23 мкс) – YXD

+1

Забудьте о стеке C, объекты numpy не могут его использовать. Пространство будет освобождено до того, как объект будет даже возвращен Python. – delnan

+0

@MrE Я тестировал его на трех компьютерах Win7 (2 на работе и 1 на дому), и это _around_ одинаково для каждого. Может быть, на вашем компьютере есть другое обрезание? Или, может быть, не один? –

ответ

0

Я запустил ваш код на своем компьютере. это почти то же самое время для каждого цикла в двух разных экспериментах, это не проблема с стеком/кучей, потому что расположение памяти будет в том же состоянии, я думаю, что это может быть проблема с памятью. память моего компьютера - 16 ГБ.

+0

Вы используете 64-битный питон? –

+0

Да, мой os 64-бит. – Djvu

+0

64-битный прыжок, кажется, происходит около 130000 элементов и не так драматичен. –

Смежные вопросы