在 Python 3 中并行化'for'循环



我正在尝试对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做一些事情,但一直没能做到。

我不确定如何解决这个问题。

我的猜测是,您希望同时处理多个文件。要做到这一点,最好的方法(在我看来(是使用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矩阵的元组。使用此功能,您可以同时处理多个文件。如果每个文件的计算时间都很长,则效率特别高。

相关内容

  • 没有找到相关文章

最新更新