我试图确定执行 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。
最佳答案
我的电脑也遇到了同样的问题。不知道解释一下。
我绘制了时间除以数组长度,因此如果时间复杂度是线性的,它应该保持不变。
该图是 10 次运行的平均值,因此每次试验中都会出现高峰
(x 轴上的数字是数组大小的对数,而 y 轴上的数字是时间(以秒为单位)除以数组大小)
关于python - 由于数组大小的微小差异,创建 numpy.zeros 的时间差异很大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21287973/