我正在使用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
答案 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);
这适用于群集而不会产生任何错误。