Я пытался определить временную сложность выполнения 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.
На моей машине (Ubuntu 64 бит и т. Д.) Тайминги почти одинаковы (~ 23 мкс) – YXD
Забудьте о стеке C, объекты numpy не могут его использовать. Пространство будет освобождено до того, как объект будет даже возвращен Python. – delnan
@MrE Я тестировал его на трех компьютерах Win7 (2 на работе и 1 на дому), и это _around_ одинаково для каждого. Может быть, на вашем компьютере есть другое обрезание? Или, может быть, не один? –