Как распараллелить код MATLAB, чтобы быстрее печатать все возможные 3-кортежи?

#matlab #vectorization

#matlab #векторизация

Вопрос:

Как мне распараллелить последовательный код MATLAB ниже? Вы можете предположить, что печать 3-х кортежей в другом порядке в порядке, если напечатаны все возможные перестановки.

     for dt=1e-10:1e-10:1e-9
        for dx=1e-7:1e-7:1e-6
            for dy=1e-7:1e-7:1e-6
               disp(dx)
               disp(dy)
               disp(dt)
            end
        end
    end
  

Ответ №1:

вот и все:

 dt=1e-10:1e-10:1e-9;
dx=1e-7:1e-7:1e-6;
dy=1e-7:1e-7:1e-6;

[a1, a2, a3]=meshgrid(dx,dy,dt);
answer=[a1(:) a2(:) a3(:)]
  

Я не уверен, что именно вы подразумеваете под «печатью», приведенный выше код представляет собой векторизованную версию ваших циклов for , где каждая строка answer — это 3 dx, dy, dt, которые вложенный цикл будет выдавать на каждой итерации.

Ответ №2:

Другой ответ — правильный ответ. Но, если вы действительно хотите распараллелить свою печать по какой-либо причине:

 numberOfThreads = 4
parpool(numberOfThreads)
parfor dt=1e-10:1e-10:1e-9
    for dx=1e-7:1e-7:1e-6
        for dy=1e-7:1e-7:1e-6
           disp(dx)
           disp(dy)
           disp(dt)
        end
    end
end