Parfor使用测试数据但不使用真实数据

时间:2018-03-28 08:16:49

标签: matlab matrix regression parfor

我正在使用Matlab 2016a。我有四个大小为2044x1572x84的矩阵,我试图回归每个矩阵的每一列,以产生一个新的2044x1572回归系数矩阵。我需要使用parfor; for循环会花费太长时间。

当我使用下面的代码使用测试数据时(例如使用rand制作四个50x50x40的矩阵),代码执行时没有错误。但是,当我尝试在具有完整2044x1572x84矩阵的群集中使用相同的代码时,我得到关于表的透明度违规错误:使用表时出错(第247行)透明度违规错误。 I&#39 ;我试过修改表代码来解决这个问题但只得到一系列其他错误。

我不确定如何在这种情况下修复错误,特别是考虑到代码的成功似乎取决于输入数据的大小。我对parfor并不是特别熟悉,对我可能做错的任何反馈都会非常感激。

COEFF_LST=ones(2044,1572);

parfor i=1:2044
for j=1:1572

ZZ=squeeze(ARRAY_DETREND_L2_LST(i,j,:));
XX=squeeze(ARRAY_DETREND_L2_ONDVI(i,j,:));
YY=squeeze(ARRAY_DETREND_WB_85(i,j,:));
LL=squeeze(ARRAY_DETREND_L2_CNDVI(i,j,:));

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

lm=fitlm(T);
array=table2array(lm.Coefficients);
COEFF_LST(i,j)=array(3,1);

end
end

2 个答案:

答案 0 :(得分:0)

table构造函数在某些情况下使用inputname - 这可能会导致parfor内的透明度违规。我意识到这很不方便,但也许你可以尝试在一个单独的函数中“隐藏”table调用。即。

parfor ...
    T = myTableBuilder(ZZ,XX,...);
end

function t = myTableBuilder(varargin)
    t = table(varargin{:});
end

答案 1 :(得分:0)

在这种情况下,table出现透明度错误,因此一个简单的解决方案就是不使用table

在这种情况下,代码为:

Predictor_Matrix=horzcat(ZZ,XX,YY);
    lm = fitlm(Predictor_Matrix,WW);

这适用于群集而不会产生任何错误。