读取数据的速度最快:dict,array np-array

时间:2016-06-20 09:19:39

标签: arrays python-3.x numpy dictionary

我创建了三个版本来存储,但更重要的是在python3中读取数据:

  1. 1st:一个包含970200键 - 值对的词典
  2. 2nd:尺寸为100且具有相同907200条目的3-D np阵列
  3. 3rd:与np-array相同的数组
  4. 500,000次阅读操作的阅读时间如下: (对于测试我读了500.000倍相同的值,条目)

    1. 1st:0..07379
    2. 第二名:0.3007
    3. 3rd:0.0987
    4. 我预计np阵列可能是最快的,但令人惊讶的是它是最慢的。

      更多细节: 可以将3d数组视为点的三维坐标 - 几乎每个点都分配了一个值。该值介于[0,3200]之间。在3-D数组中,3维是点的位置,条目是值a[222][333][444]=1111

      来自Tadhg McDonald-Jensen的访问版本(np阵列的[222,333,444])需要:0.129

      dict具有像"[222, 333, 444]":1111这样的键值对 创建这些结构后: 将dict,数组或np-array中的值分配给变量500.000次会导致上述运行时间。

      更新: 数据从文件读入结构 - 在程序中我想从内存中的结构(dict,np-array或array)访问各个值。我只对存储器中的访问进行计时(在结构已填满数据之后)

      问题: 从理论的角度来看,我的结果是否正确 - np-array是否是读取数据的最慢选择? 谢谢您的帮助! ATramp

1 个答案:

答案 0 :(得分:0)

NumPy可快速进行(大)数组的数值计算。您正在测量Python代码中一个元素的访问时间。举个例子:

import numpy as np

n = 10
a = np.arange(n)
d = dict.fromkeys(range(n))

访问字典的速度更快:

%timeit d[0]
10000000 loops, best of 3: 85.4 ns per loop

比NumPy数组的那个:

%timeit a[0]
10000000 loops, best of 3: 177 ns per loop

请注意,此时间与结构的大小无关。

结论:NumPy对阵列上的矢量化操作很快。在NumPy数组上执行大量纯Python操作比使用内置Python数据类型要慢。

  

问题:从理论的角度来看,我的结果是否正确    - np-array可能是读取数据的最慢选项吗?

是的,当从Python代码访问NumPy数组中的数据时,这可能就是对这些数组的所有操作。