更新日期:2018年11月15日
我扩展了计时测试,以澄清ndarray、结构化数组、重排和屏蔽数组(记录数组的类型?)每种都有细微的差别。请参阅此处的讨论:
numpy-discussion:structured-arrays-recarrays-and-record-arrays
这是我的性能测试结果。我构建了一个非常简单的示例(使用我的hdf5数据集中的一个),将性能与存储在4种类型数组中的相同数据进行比较:ndarray、结构化数组、重排和屏蔽数组。在构造数组之后,它们被传递给一个函数,该函数只需遍历每一行并从每一行提取12个值。函数是从
timeit
单通函数(数字=1)。此测试仅测量数组读取函数,并避免所有其他计算。
9000行的结果如下:
for ndarray: 0.034137165047070615
for structured array: 0.1306827116913577
for recarray: 0.446010040784266
for masked array: 31.33269560998199
基于此测试,访问性能随类型的不同而降低。结构化阵列和重新排列的访问时间比nDarray访问慢4-13倍(但都只是秒的一小部分)。但是,ndarray访问比屏蔽阵列访问快1000倍。这就解释了我在完整示例中看到的秒到分钟的差异。希望这些数据对遇到这个问题的其他人有用。