我创建了三个版本来存储,但更重要的是在python3中读取数据:
500,000次阅读操作的阅读时间如下: (对于测试我读了500.000倍相同的值,条目)
我预计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
答案 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数组中的数据时,这可能就是对这些数组的所有操作。