是否有任何解决方案可以加速从磁盘读取栅格数据并将其转换为numpy数组以进行进一步处理?我真的很累,因为以下代码需要花费数天的时间来阅读(并转换成numpy数组)数千个文件。
import glob, gdal, numpy as np
tiff_files = glob.glob('*.tif')
all_data = []
for f in tiff_files:
data_open = gdal.Open(f)
data_array = data_open.ReadAsArray().astype(np.float32)
all_data.append(data_array)
如何对上述情况应用多处理?
答案 0 :(得分:1)
这并不难,因为你的tiff_files已经是一个列表,一个重要的问题是命令是否重要 - 结果必须与原始文件的顺序相同。如果不是
from multiprocessing import Pool
from multiprocessing import cpu_count
def handle_tiff(some_file):
data_open = gdal.Open(some_file)
data_array = data_open.ReadAsArray().astype(np.float32)
return data_array
tiff_files = glob.glob('*.tif')
p = Pool(cpu_count()- an_integer)
all_data = p.map(handle_tiff, tiff_files)
在上面的代码中,您只需使用cpu_count而不减去整数。
在回答您的问题时,some_file是列表tiff_files的路径。请注意,p.map将列表tiff_files中的每个项目映射到函数handle_tiff并生成一些线程。该列表分为不连续的块,每个块分配给不同的线程。然后,每个块中的文件路径按顺序提交给函数。