Довольно просто удалить внутренние 4 петли.Это будет более эффективно, если у вас не огромная матрица Inpts.payout
, поскольку должна быть сгенерирована новая индексная матрица.
Следующий код извлекает две соответствующие «плоскости» из входных данных и выполняет их логику, затем записывает их обратно:
for m = 1:length(M)-1
payout_m = Inpts.payout(M(m),:,:,:,:);
payout_m1 = Inpts.payout(M(m+1),:,:,:,:);
indx = payout_m < 0;
payout_m1(indx) = payout_m1(indx) + payout_m(indx);
payout_m(indx) = 0;
Inpts.payout(M(m),:,:,:,:) = payout_m;
Inpts.payout(M(m+1),:,:,:,:) = payout_m1;
end
Можно избежать извлечения «плоскостей» и их обратной записи, работая непосредственно с матрицей входных данных.Однако это приводит к более сложному коду.
Тем не менее, мы можем легко избежать некоторых операций индексирования следующим образом:
payout_m = Inpts.payout(M(1),:,:,:,:);
for m = 1:length(M)-1
payout_m1 = Inpts.payout(M(m+1),:,:,:,:);
indx = payout_m < 0;
payout_m1(indx) = payout_m1(indx) + payout_m(indx);
payout_m(indx) = 0;
Inpts.payout(M(m),:,:,:,:) = payout_m;
payout_m = payout_m1;
end
Inpts.payout(M(m+1),:,:,:,:) = payout_m1;