我试图在字典和numpy数组之间进行比较。
我确定numpy数组会更快,因为当我执行numpy_array[i]
时,它只需要在数组开始后检查第ith个字即可,但是执行dictionary[i]
将使用哈希计算,并且使用更复杂的数据结构。
但是,我在ipython中用%timeit尝试过,字典和数组是相同的,这些是我的结果:
In [161]: def getter(obj, n): return obj[n]
In [162]: %timeit getter(dictionary, 6)
The slowest run took 10.84 times longer than the fastest. This could mean that an intermediate result is being cached.
10000000 loops, best of 3: 110 ns per loop
In [163]: %timeit getter(numpyarray, 6)
The slowest run took 27.87 times longer than the fastest. This could mean that an intermediate result is being cached.
1000000 loops, best of 3: 180 ns per loop
你怎么解释呢?
答案 0 :(得分:0)
要注意的一件事是,一个numpy数组具有大量记账功能,请参见ndarray attributes。您可以通过更改strides
属性的值来破坏数组,只是为了好玩。
此外,如果将元素从float数组中取出,则不会获得本机Python的float,而是np.float64
对象。
>>> type(np.linspace(0, 1)[0])
numpy.float64
我怀疑创建一个np.float64对象比原生Python浮点有更多的开销。至少,它具有更多的属性和方法。不过不确定。您不能在其中添加属性的普通对象。
顺便说一句,访问列表元素6的速度与dict
上的访问速度差不多。