【发布时间】:2018-09-06 20:04:26
【问题描述】:
我正在使用 Matlab 2016a。我有四个大小为 2044x1572x84 的矩阵,我试图对每个矩阵的每一列进行回归,以生成一个新的 2044x1572 回归系数矩阵。我需要使用 parfor; for 循环会花费太长时间。
当我使用下面的代码和测试数据(例如,使用 rand 制作四个 50x50x40 的矩阵)时,代码执行时没有错误。但是,当我尝试在具有完整 2044x1572x84 矩阵的集群中使用相同的代码时,我收到关于表的透明度违规错误:Error using table (line 247) Transparency violation error。我已经尝试修改表代码来解决这个问题,但只得到一套其他错误。
我不确定在这种情况下如何修复错误,特别是考虑到代码的成功似乎取决于输入数据的大小。我对 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
【问题讨论】:
-
当您尝试将变量添加到 parfor 循环的主体时,也会出现透明度错误,请参阅:Lorens blog。您确定您对测试数据做了完全相同的事情吗?为什么不尝试将内部 for 循环放入子函数中。是否有必要在表中分配名称,为什么不直接创建数组/矩阵?
-
您能否编辑上面的代码以使其独立(即定义所有输入,以便我可以复制粘贴并运行它)?另请参阅:minimal reproducible example.
标签: matlab matrix regression parfor