"Parfor": несоответствие размера подписанного присвоения
Пожалуйста, я написал код ниже, и он отлично работает, но это занимает около 6 часов. Поэтому мне предложили использовать parfor
сократить время. Но потом я столкнулся с ошибкой "Несоответствие размеров заданного назначения", и она не появляется сразу; это занимает 2 часа, после чего я получил сообщение об ошибке после завершения всех чисел итерации.
Поэтому я был бы очень признателен за вашу поддержку! Кстати, я просто поставил parfor ind1=1:720;
вместо for
!
lon_rs=(reshape(l2aRS.clon_RS,3560*2000,1));
lat_rs=(reshape(l2aRS.clat_RS,3560*2000,1));
RSsig0=(reshape(l2aRS.sig0_RS,3560*2000,1));
RS_s0=zeros(720,360);
QS_s0=zeros(720,360);
I=ceil(2*(lon_rs));
J=ceil(2*(lat_rs+90));
K=ceil(2*(l1cQS.clon_QS));
L=ceil(2*(l1cQS.clat_QS+90));
for ind1=1:720;
ind1
for ind2=1:360;
indsRS=find((I==ind1) &(J==ind2) &(RSsig0~=0));
len_temp1=length(indsRS);
if (len_temp1>0);
len_RS(ind1,ind2)=len_temp1;
RS_s0(ind1,ind2)=median(RSsig0(indsRS));
end;
indsQS=find((K==ind1) &(L==ind2) &(l1cQS.sig_QS~=0));
len_temp2=length(indsQS);
if (len_temp2>0);
len_QS(ind1,ind2)=len_temp2;
QS_s0(ind1,ind2)=median(l1cQS.sig_QS(indsQS));
end;
end;
end;
1 ответ
Всякий раз, когда вы используете цикл, рекомендуется предварительно выделить любые переменные, которые могут изменить свой размер в цикле до их окончательного размера. Если вы хотите использовать parfor
тогда вы должны предварительно выделить len_RS
а также len_QS
как ты сделал для RS_s0
это, безусловно, сократит время выполнения этого кода. Это также может решить проблему "несоответствия размеров".