【问题标题】:How to optimize a triple nested for loop over 3 separate arrays (Python)如何优化 3 个单独数组上的三重嵌套 for 循环(Python)
【发布时间】:2019-12-02 00:48:02
【问题描述】:

我有这个三重嵌套的 for 循环,循环 3 个单独的 netcdf4 数组(对于所有意图和目的,numpy 数组)。每个数组的长度不同。目标是构建一个字典变量(名为 json),其中包含 time_count 作为最外层键,另一个字典作为值。在该字典中,键是 lat-lon 对(字符串),变量作为值(在本例中为温度)。

代码按预期工作,但速度很慢。我想知道是否有一种方法可以优化这样的嵌套循环,或者一般来说可能是一种更有效的方法来解决这个问题?

def create_json_dataset(netcdf_data):
    json = {}
    for time_count, temp_array in enumerate(dataset.variables['t'][:]):
        json[time_count] = {}
        for lat_count, lat in enumerate(dataset.variables['latitude'][:]):
            for lon_count, lon in enumerate(dataset.variables['longitude'][:]):
                lat_lon = str(lat) + ',' + str(lon)
                json[time_count][lat_lon] = {'temperature': dataset.variables['t'][time_count, lat_count, lon_count]}

    return json

【问题讨论】:

  • 最好提供一些输入输出数据给别人更好的理解代码的逻辑。
  • 我要做的第一件事是尽量不要使用[:] 制作副本 - 这是完全没有必要的,因为您不会尝试修改任何数据,而是创建全新的数据。

标签: python arrays loops optimization netcdf4


【解决方案1】:

您可以尝试以下方法来优化您的代码:

  1. for 循环之外分配 dataset.variables[some key] 的值,这样它就不必每次都获取它。

  2. 使用join创建lat_lon

  3. temp_array 未使用,因此您可以删除它

所以您的代码可能如下所示:

var_t = dataset.variables[’t’]
var_latitute = dataset.variables[‘latitude’]
var_longitude = dataset.variables[‘longitude’]
output_json = {}

for t_index in range(len(var_t)):
    output_json[t_index] = {}
    for lat_index, lat in enumerate(var_latitude):
        for lon_index, lon in enumerate(var_longitude):
            lat_lon = “,”.join([str(lat), str(lon)])
            output_json[t_index][lat_lon] = {'temperature': var_t[t_index, lat_index, lon_index]}```

【讨论】:

    猜你喜欢
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    相关资源
    最近更新 更多