MATLAB双重循环 迭代,如何嵌套多个parfor循环

MrAzzman已经指出如何线性化嵌套循环。这是线性化嵌套循环的一般解决方案。

1)假设你有一个简单的嵌套循环结构:

%dummy function for demonstration purposes

f=@(a,b,c)([a,b,c]);

%three loops

X=cell(4,5,6);

for a=1:size(X,1);

for b=1:size(X,2);

for c=1:size(X,3);

X{a,b,c}=f(a,b,c);

end

end

end

2)使用for循环的基本线性化:

%linearized conventional loop

X=cell(4,5,6);

iterations=size(X);

for ix=1:prod(iterations)

[a,b,c]=ind2sub(iterations,ix);

X{a,b,c}=f(a,b,c);

end

3)使用parfor循环进行线性化。

%linearized parfor loop

X=cell(4,5,6);

iterations=size(X);

parfor ix=1:prod(iterations)

[a,b,c]=ind2sub(iterations,ix);

X{ix}=f(a,b,c);

end

4)使用具有传统for循环的第二个版本,改变执行迭代的顺序。如果有什么依赖于此,你必须颠倒索引的顺序。

%linearized conventional loop

X=cell(4,5,6);

iterations=fliplr(size(X));

for ix=1:prod(iterations)

[c,b,a]=ind2sub(iterations,ix);

X{a,b,c}=f(a,b,c);

end

使用parfor循环时撤消顺序无关紧要。你根本不能依赖执行的顺序。如果您认为它有所作为,则无法使用parfor。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值