Как я могу переписать этот код MATLAB, используя векторизацию? - PullRequest
0 голосов
/ 22 мая 2019

Как я могу быстрее написать этот код в MATLAB?Может быть, с использованием векторизации.В принципе, я не знаю, как векторизовать с if.Далее, если элемент массива u равен 0, тогда цикл while происходит с обновлением.Если элемент не равен нулю, то benefit(c,t,w) = B(c,tprime,w)/u(c,tprime,w); и i(c,t,w) = tprime ; происходят.

county_size=3 ; time_size = 3; scenario_size = 3;
for c=1:county_size
    for w=1:scenario_size
        for t=tt:time_size
            l = u(c,t,w) ;
            tprime = t ;
            while (l==0)
                if tprime > time_size-1
                    tprime = time_size + 1 ;
                    B(c,time_size + 1,w) = 0 ;
                    u(c,time_size + 1,w) = 1 ;
                    break
                end
                l = u(c,tprime+1,w) ;
                tprime = tprime + 1 ;
            end
            benefit(c,t,w) = B(c,tprime,w)/u(c,tprime,w) ;
            i(c,t,w)       = tprime ;
        end
    end
end

1 Ответ

1 голос
/ 22 мая 2019

Я пойму этот запрос на векторизацию как более общее, как улучшить производительность, посмотрев на эту часть:

 tprime = t ;
 while (l==0)
 if tprime > time_size-1
   tprime = time_size + 1 ;
   B(c,time_size + 1,w) = 0 ;
   u(c,time_size + 1,w) = 1 ;
   break
 end
 l = u(c,tprime+1,w) ;
 tprime = tprime + 1 ;
 end

Единственная цель while - найти первый ненулевой элементв u(c,t:end-1,w).Для этого есть функция find с третьим аргументом, установленным на first.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...