我有一系列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多张图片来运行这个过程,但我必须以更聪明的方式实现它。我不熟悉多线程,我相信它会起作用。