Non-repeating selection from sets

2 views (last 30 days)
A is 1 by a matrix, B 1 by b, and C 1 by c. D is supposed to be the set of all non-repeating selection of respectively A, B, and C columns. What would be the most economical code of triples extraction? Thanks.

Accepted Answer

Dyuman Joshi
Dyuman Joshi on 27 Dec 2023
Edited: Dyuman Joshi on 28 Dec 2023
%Random data
A = 1:3;
B = 1:4;
C = 1:5;
D = {A, B, C}
D = 1×3 cell array
{[1 2 3]} {[1 2 3 4]} {[1 2 3 4 5]}
n = numel(D);
%Preallocate
out = cell(1, n);
%Reverse order to get the lexicographical order when concatenating
[out{end:-1:1}] = ndgrid(D{end:-1:1});
%Concatenate and reshape the data corresponding to number of vectors
out = reshape(cat(n,out{:}),[],n);
disp(out)
1 1 1 1 1 2 1 1 3 1 1 4 1 1 5 1 2 1 1 2 2 1 2 3 1 2 4 1 2 5 1 3 1 1 3 2 1 3 3 1 3 4 1 3 5 1 4 1 1 4 2 1 4 3 1 4 4 1 4 5 2 1 1 2 1 2 2 1 3 2 1 4 2 1 5 2 2 1 2 2 2 2 2 3 2 2 4 2 2 5 2 3 1 2 3 2 2 3 3 2 3 4 2 3 5 2 4 1 2 4 2 2 4 3 2 4 4 2 4 5 3 1 1 3 1 2 3 1 3 3 1 4 3 1 5 3 2 1 3 2 2 3 2 3 3 2 4 3 2 5 3 3 1 3 3 2 3 3 3 3 3 4 3 3 5 3 4 1 3 4 2 3 4 3 3 4 4 3 4 5
  4 Comments
Amir Mahmoudi
Amir Mahmoudi on 28 Dec 2023
Your code is working precisely. I had made a minor mistake. Thanks.
Amir Mahmoudi
Amir Mahmoudi on 28 Dec 2023
I deleted my previous comments.

Sign in to comment.

More Answers (0)

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!