"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 это, безусловно, сократит время выполнения этого кода. Это также может решить проблему "несоответствия размеров".

Другие вопросы по тегам