【发布时间】:2012-04-15 05:03:21
【问题描述】:
目前我的 .m 文件看起来像这样
for a = 1 : 47
for b = a+1 : 48
for c = b+1 : 49
for d = c+1 : 50
fprintf('%d %d %d %d \n',a,b,c,d);
end
end
end
我正在尝试从 1,2,3,...50 生成 4 个元素的集合 即{1,2,3,4},{1,2,3,5},...{1,2,3,50},{1,2,4,5},..{47, 48 , 49, 50}。因此,总共有 C(50,4) 个集合。我想知道是否有比这 4 个嵌套循环更快的替代方案?一组中的顺序不一定按递增顺序。即如果代码生成 {4,1,2,3} 而不是 {1,2,3,4} 就可以了。
【问题讨论】:
-
Matlab 有并行循环。在文档中搜索“parfor”
-
我尝试用 parfor N = 4 : 50 添加替换 N = 4 : 50 ,但结果速度较慢。
-
parfor仅在您设置了matlabpool时才会并行化,这需要并行计算工具箱。实际的parfor命令是基本 Matlab 的一部分,因此开发人员可以在没有该工具箱的情况下工作,然后稍后将其折叠到带有其他工具箱的会话中。