迭代4维数组的最快方法是什么?

时间:2017-02-09 12:00:43

标签: arrays postgresql python-3.x

我有一些变量需要插入数据库(PostGres)。 变量是4-D,每个变量都有以下属性:时间,等级,纬度,经度。

例如:

print(sulphate_aerosol[0][1][400][367])
>> 3.539193384838e-06

我有13个变量(现在!),我需要迭代每个变量,提取数据并将其插入到Postgres数据库中。

我能做到:

for i in datalength:
    for j in latlenth:
        for k in longlength:
            for l in levellength:
                insert(myVar[i][j][k][l])

但这可能比Python专家提出的一些更快的方法要慢。

我还认为将值存储在数组中并执行批量插入可能是个好主意,如here所示,因此对此的任何建议也将受到赞赏。

1 个答案:

答案 0 :(得分:1)

如果您无法改进insert(..) 以使其与批量数据一起使用,那么时间复杂度当然会保持不变相同:你不能迭代完整的4d数组而不迭代它们中的每个元素。

然而,您可以稍微改善常数因子,因为在这里,对于您执行的每个元素:

myVar[i][j][j][l]

因此四个索引查找。这些都不是必需的,因为在内循环中,您知道myVar[i][j][j]将始终保持不变。因此,您可以通过以下方式短路访问:

for myvar_i in myvar:
    for myvar_ij in myvar_i:
        for myvar_ijk in myvar_ij:
            for myvar_ijkl in myvar_ijk:
                insert(myVarijkl)

对于批量插入,您确实可以先构建一个列表。类似的东西:

result = []
for myvar_i in myvar:
    for myvar_ij in myvar_i:
        for myvar_ijk in myvar_ij:
            result += myvar_ijk

然后用:

来调用它
bulk_insert(result)