0
这是在Iterate one vector through another in Matlab迭代一个通过另一个在Matlab部位矢量2
我的帖子了类似的请求,我使用路易斯的建议,用下面的代码:
E=[1 2 3 4 5 6 7 8 9 10];
A = [1 2];
s = size(E,2);
t = numel(A);
C = cell(1,s);
[C{:}] = ndgrid(A);
C = cat(s+1, C{:});
C = fliplr(reshape(C, t^s, s));
这会产生一个好的结果C作为1024×10的矩阵,其中1和2的所有可能的排列组合为10列的长度。我想要做的是删除任何不按升序排列的行。比如现在我得到:
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 2
1 1 1 1 1 1 1 1 2 1
1 1 1 1 1 1 1 1 2 2
全部相同,只是第三排有效的,因为它从2去回1 我有代码来获得想要的结果,但它是非常缓慢和低效。现在
E=[1 2 3 4 5 6 7 8 9 10];
A = [1 2];
s = size(E,2);
t = numel(A);
C = cell(1,s);
[C{:}] = ndgrid(A);
C = cat(s+1, C{:});
C = fliplr(reshape(C, t^s, s));
min=0;
for row=1:size(C,1)
for col=1:size(C,2)
if(C(row,col)>min)
min=C(row,col);
elseif(C(row,col)<min)
C(row,:)=0;
continue;
end
end
min=0;
end
C = C(any(C,2),:); %remove all zero rows
所需的输出是:
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 2
1 1 1 1 1 1 1 1 2 2
1 1 1 1 1 1 1 2 2 2
1 1 1 1 1 1 2 2 2 2
1 1 1 1 1 2 2 2 2 2
1 1 1 1 2 2 2 2 2 2
1 1 1 2 2 2 2 2 2 2
1 1 2 2 2 2 2 2 2 2
1 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2
如何优化我的代码,任何想法,所以我并不需要使用嵌套循环?
+1或者使用'C = C(所有(d> = 0,2),:);' –
谢谢你们。你的建议结合起来就像一个魅力!我的模拟比较闪电般快。 – user3221856