Matlab parfor循环工作,然后放弃一半

时间:2018-03-22 22:00:57

标签: matlab multidimensional-array regression parfor

我正在使用Matlab R2016a做一些回归。

我有四个三维矩阵。前三个矩阵表示“预测变量”变量,第四个矩阵表示“响应”变量,第三维中的数据表示同一位置不同时间的样本。

我想在四个矩阵中的相同x,y坐标处回归所有列,并得到一个仅具有回归系数的新的2044x1572矩阵。

parfor A=1:2044
for B=1:1572

ZZ=squeeze(ARRAY_DETREND_L2_LST(A,B,:));
XX=squeeze(ARRAY_DETREND_L2_ONDVI(A,B,:));
YY=squeeze(ARRAY_DETREND_WB_85(A,B,:));
LL=squeeze(ARRAY_DETREND_L2_CNDVI(A,B,:));

end 

T=table([ZZ,XX,YY,LL,'VariableNames',{'LST','ONDVI','DROUGHT','NDVI'}]);

lm=fitlm(TABLE);
COEFF_LST(A,B)=lm.Coefficients.Estimate(2,1);

end

代码按原样运行。然而,我想要的最后一层,即回归系数的单个2044x1572矩阵,只有一半是完整的。我得到的唯一警告是“回归设计矩阵在机器精度范围内排名不足”。但是,我并不担心。我的研究区域周围的数据是NaN,所以有很多列被归化为NaN。

如果我更改代码以便两个“结束”语句结束,那么我就会遇到代码运行的相反问题。

enter image description here

在我看来,这个parfor代码有效,但是parfor在中间放弃了。我有一个版本的代码只使用for循环,但我的数据是不可能大的for循环处理。上面的图像是使用parfor在几分钟内创建的,这对于正常的循环来说需要花费很多时间。

任何关于我做错的反馈都会非常感激。

0 个答案:

没有答案