Creating a Combination of Multiple Arrays
11 次查看(过去 30 天)
显示 更早的评论
I'm having trouble coming up with code to create a combination between two arrays. In my first array, result, I computed the Cartesian product between the two vectors of A.
>> A = {[1 2 3], [4 5 6]}
c = cell(1,numel(A));
[c{:}] = ndgrid(A{:});
result = cell2mat(cellfun(@(v)v(:), c, 'UniformOutput', false) )
resulta =
1 4
2 4
3 4
1 5
2 5
3 5
1 6
2 6
3 6
My second array is:
resultb =
1 3
2 4
I am trying to create iterations between the rows of result and result b. To make it clearer, I want my output array to look like this:
resultc=
1 4 1 3
2 4 1 3
3 4 1 3
1 5 1 3
2 5 1 3
3 5 1 3
1 6 1 3
2 6 1 3
3 6 1 3
1 4 2 4
2 4 2 4
3 4 2 4
1 5 2 4
2 5 2 4
3 5 2 4
1 6 2 4
2 6 2 4
3 6 2 4
How would I create code to achieve this regardless of the sizes of matrices resulta and resultb? Thanks!
0 个评论
采纳的回答
OCDER
2018-7-9
combvec(resulta', resultb')'
3 个评论
OCDER
2018-7-12
I don't know a more direct way off the top of my head, but you could make a combination of indices of the cell arrays instead, and then assemble your combination cell array at the way end. See this example:
resulta = [
1 4
2 4
3 4
1 5
2 5
3 5
1 6
2 6
3 6];
resultb =[
1 3
2 4];
%Just making some example cell arrays
cella = num2cell(resulta);
cella{1} = 'a';
cellb = num2cell(resultb);
cellb{2} = 'b';
%1) create a joined matrix of size (Ma+Mb)x1
cellab = [cella(:); cellb(:)];
%2) find all combination of the linear indices of cella and cellb
IdxA = reshape(1:numel(cella), size(cella));
IdxB = reshape(1:numel(cellb), size(cellb)) + numel(cella); %Add numel(cella) at end because you want the linear index of cellab
ComboIdx = combvec(IdxA', IdxB')';
%3) now make your combination cell array
ComboCell = reshape(cellab(ComboIdx(:)), size(ComboIdx));
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Data Type Conversion 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!