Hello.......i have a matrix.......what i wonaa do is count the repeated entries in column 2 first then make arrangement =(number of repeated termes)! ..for example in given matrix i have two repeated terms so first arrangmnt..1 2 3 the second 2 1 3

1 回表示 (過去 30 日間)
a=[1 4;2 4;3 2]
required answer is
repeated terms=2
Arrangments are
1 4
2 4
3 2
&
2 4
1 4
3 2
  2 件のコメント
madhan ravi
madhan ravi 2018 年 12 月 5 日
what do you mean 2 and 4 are repeated twice? what‘s the rule?
inzamam shoukat
inzamam shoukat 2018 年 12 月 5 日
編集済み: inzamam shoukat 2018 年 12 月 5 日
Actually i have to scan only column 2 to chk repeated terms....and then then arrange the matrix as given i can do it by sortroes cammand but it can give me only 1 answer i need factorial times arrangments...... column 1 enteries are just serial number there is nothing to do with it imagine it was not even there
repeated terms=2
Arrangments are
1 4
2 4
3 2
&
2 4
1 4
3 2

サインインしてコメントする。

採用された回答

Stephen23
Stephen23 2018 年 12 月 5 日
編集済み: Stephen23 2018 年 12 月 5 日
Interesting problem. I used a slightly more complex example, with two values duplicated (4 twice, 9 thrice), for which we would expect twelve possible permutations:
>> a = [1,4;2,9;3,2;4,9;5,4;6,9]
a =
1 4
2 9
3 2
4 9
5 4
6 9
And the code:
[N,B] = histc(a(:,2),unique(a(:,2))); % count instances of values in 2nd column
X = find(N>1); % find duplicate values
foo = @(x)perms(find(B==x)); % row permutations for each duplicate value
C = arrayfun(foo,X,'uni',0); % "
S = cellfun('size',C,1); % count row permutations
L = arrayfun(@(r)1:r,S,'uni',0); % row indices for each permutation matrix
[L{:}] = ndgrid(L{:}); % combine row indices
R = cellfun(@(v)v(:),L,'uni',0); % "
baz = @(m,r)m(r,:); % use row indices to select all permutations
M = cellfun(baz,C,R,'uni',0); % "
V = 1:size(a,1); % original row indices of input matrix
Z = cell(1,prod(S)); % preallocate output cell array
for ii = 1:prod(S) % for each possible permutation...
for jj = 1:numel(X) % for each duplicate value...
V(B==X(jj)) = M{jj}(ii,:); % get row permutation indices
end %
Z{ii} = a(V,:); % use indices to select from input matrix
end
And checking the output:
>> numel(Z) % should be 3!*2!
ans = 12
>> Z{:}
ans =
1 4
2 9
3 2
4 9
5 4
6 9
ans =
5 4
2 9
3 2
4 9
1 4
6 9
ans =
1 4
4 9
3 2
2 9
5 4
6 9
ans =
5 4
4 9
3 2
2 9
1 4
6 9
ans =
1 4
2 9
3 2
6 9
5 4
4 9
ans =
5 4
2 9
3 2
6 9
1 4
4 9
ans =
1 4
4 9
3 2
6 9
5 4
2 9
ans =
5 4
4 9
3 2
6 9
1 4
2 9
ans =
1 4
6 9
3 2
2 9
5 4
4 9
ans =
5 4
6 9
3 2
2 9
1 4
4 9
ans =
1 4
6 9
3 2
4 9
5 4
2 9
ans =
5 4
6 9
3 2
4 9
1 4
2 9
Note that the number of permutations is (# of 1st duplicate value)! * (# of 2nd duplicate value)! * (# of 3rd duplicate value)! * ... , which will clearly explode very quickly into something totally intractable....
  1 件のコメント
inzamam shoukat
inzamam shoukat 2018 年 12 月 8 日
thanks sir it worked.....if any further help i need going to ask u....

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

タグ

製品


リリース

R2017b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by