我试图确定执行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堆上存储另一个大小的数组?我甚至不确定这个问题是否有意义。
我在Windows 7机器上使用32位python 3.3.1和numpy 1.7.0rc1。