Generating an "all-combinations" matrix for a given vector
2 次查看(过去 30 天)
显示 更早的评论
Hi,
Given a column vector with integer values, say x = [2;3;4], I would like to create a 3*24 matrix of the following form
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/157750/image.jpeg)
Each column in A is created by selecting 1st, 2nd and 3rd elements of the corresponding column from sets {1,2}, {1,2,3} and {1,2,3,4}, respectively. Thus, 2*3*4=24 different columns can be generated using this approach to form matrix A.
I am aware that the number of columns in matrix A grows very fast with the size of vector x and numeric values of its elements. But I won't be working with examples of matrix A larger than 500 cloumns.
Thanks for your help,
-burak
0 个评论
采纳的回答
Thorsten
2016-11-7
x = [2 3 4];
n = prod(x);
for i = 1:numel(x)
li = []; for ii = 1:x(i), li = [li repmat(ii, [1 n/prod(x(1:i))])]; end,
A(i,:) = repmat(li, [1 n/numel(li)]);
end
更多回答(2 个)
Andrei Bobrov
2016-11-7
编辑:Andrei Bobrov
2016-11-8
A = fullfact(x(end:-1:1));
A = flip(A,2)';
other way :)
x = [2 3 4]';
k = arrayfun(@(ii)1:ii,x(end:-1:1),'un',0);
[a,b,c] = ndgrid(k{:});
A = [c(:),b(:),a(:)]';
KSSV
2016-11-7
clc; clear all ;
v1 = [1 2] ;
v2 = [1 2 3] ;
v3 = [1 2 3 4] ;
%
dimensions = cellfun(@numel, {v1,v2,v3});
[i1,i2,i3] = ind2sub(dimensions, 1:prod(dimensions));
combinations = [v1(i1); v2(i2); v3(i3)]
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!