在Python 3中并行化“for”循环

2024-05-23 19:45:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我想对MODIS卫星数据做些分析。我的代码主要读取1200×1200(806×1200×1200)维度的许多文件(806)。它使用for loop来完成,并执行数学运算。

下面是我阅读文件的一般方式。

mindex=np.zeros((1200,1200))
for i in range(1200):
    var1 = xray.open_dataset('filename.nc')['variable'][:,i,:].data
    for j in range(1200):
        var2 = var1[:,j]
        ## Mathematical Calculations to find var3[i,j]## 
        mindex[i,j] = var3[i,j]

由于要处理的数据太多,所以处理过程非常缓慢,我正在考虑将其并行化。我试着用joblib做些什么,但是我做不到。

我不知道如何解决这个问题。


Tags: 文件数据代码inloopfornp方式
1条回答
网友
1楼 · 发布于 2024-05-23 19:45:44

我猜你想同时处理几个文件。为此,最好的方法(在我看来)是使用multiprocessing。要使用它,您需要定义一个基本步骤,它已经在您的代码中完成了。

import numpy as np
import multiprocessing as mp
import os

def f(file):
    mindex=np.zeros((1200,1200))
    for i in range(1200):
        var1 = xray.open_dataset(file)['variable'][:,i,:].data
        for j in range(1200):
            var2 = var1[:,j]
            ## Mathematical Calculations to find var3[i,j]## 
            mindex[i,j] = var3[i,j]
    return (file, mindex)


if __name__ == '__main__':
    N= mp.cpu_count()

    files = os.scandir(folder)

    with mp.Pool(processes = N) as p:
        results = p.map(f, [file.name for file in files])

这应该返回一个元素列表results,其中每个元素是一个具有文件名和mindex矩阵的元组。这样,您可以同时处理多个文件。如果每个文件上的计算时间很长,那么它特别有效。

相关问题 更多 >