Python中的快速ndarray处理

时间:2017-08-06 22:55:26

标签: python multithreading image-processing multidimensional-array

我有一系列MODIS图像,比方说,30张图像。我想执行基于像素的线性回归。我的想法是:

第一步,创建一个np.dstack的图像:

import numpy as np
from glob import glob
from scipy.stats import linregress

arrays = [] 
for i in listofimages: 
    a,m = GDAL function to read images(i)
    arrays.append(a)
    arrays2 = np.dstack(arrays)`

第二步,为输出结果创建空数组

slope = np.zeros(shape=(arrays2.shape[0],arrays2.shape[1]))
intercept = np.zeros(shape=(arrays2.shape[0],arrays2.shape[1]))
rvalue = np.zeros(shape=(arrays2.shape[0],arrays2.shape[1]))
pvalue = np.zeros(shape=(arrays2.shape[0],arrays2.shape[1]))

最后一步是遍历所有行和列并对每个数组执行线性回归,并用回归结果填充空数组

for i in np.arange(0,arrays2.shape[0]):
    for j in np.arange(0,arrays2.shape[1]):
        res = linregress(x,arrays2[i,j,:]) 
        slope[i,j] = res[0]
        intercept[i,j] = res[1]
        rvalue[i,j] = res[2]**2 
        pvalue[i,j] = res[3]
        res = None

这个程序令人惊讶地工作,但是,太慢,我的笔记本电脑花了20分钟。在QGIS中进行相同的过程以获得斜率拦截> GRASS> r.series工具非常快,但它并没有提供我想要的所有灵活性例如,多项式回归或除线性回归或简单统计之外的任何过程。

我想用我的想法坚持下去,能够用100多张图片来运行这个过程,但我必须以更聪明的方式实现它。我不熟悉多线程,我相信它会起作用。

0 个答案:

没有答案