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