#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