Combination calculations and matrix manipulation
1 次查看(过去 30 天)
显示 更早的评论
Hello, I am working on a matrix (m x n) and I want to pick up different groups of m elements which have to be non dependent. Practically speaking I need (n-1)*m+2. For n = 4 and m = 3 I need 11 groups and an example of matrix is: [1 2 3 4, 5 6 7 8, 9 10 11 12] and the groups might be
(1 5 9),(1 5 10),(1 5 11),(1 5 12) 4
(1 6 9),(1 7 9),(1 8 9) 3
(2 5 9),(3 5 9),(4 5 9) 3
(2 6 9) 1
I have the matrix written, do you have any suggestion how to write this problem assuming that n and m are completely random and the first group has to be composed by the first column.
Thank you very much Antonio
0 个评论
采纳的回答
Matt Fig
2011-5-14
A = [1 2 3 4;
5 6 7 8;
9 10 11 12];
[m,n] = size(A);
I = npermutek(1:n,m);
J = cumsum(ones(size(I)),2);
R = A(J+(I-1)*m) % Look at each row.
If you find that NPERMUTEK gives you too many samplings, you could try one of the lesser combinatorial samplings found in this file: COMBINATOR
更多回答(3 个)
mortain Antonio
2011-5-14
1 个评论
Matt Fig
2011-5-14
Your first approach using COMBINATOR is NOT what I recommended. Use the output from COMBINATOR the same way I used NPERMUTEK in my first post.
Your second attempt is very odd, since NPERMUTEK is not a recursive algorithm. Did you make changes to the code before you got that error? Because when I copy and paste your code I get R = 64-by-3 where each row has one pick for each row of A, EXACTLY the same as Andrei's code below.
Andrei Bobrov
2011-5-14
more so?
A = [1 2 3 4;
5 6 7 8;
9 10 11 12];
A1 = mat2cell(A,[1 1 1],size(A,2));
[J K I] = meshgrid(A1{[2 3 1]});
R = [I(:) J(:) K(:)];
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!