Creating a Combination of Multiple Arrays
7 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Rachel Anthony
le 9 Juil 2018
Commenté : Rachel Anthony
le 12 Juil 2018
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 commentaires
Réponse acceptée
OCDER
le 9 Juil 2018
combvec(resulta', resultb')'
3 commentaires
OCDER
le 12 Juil 2018
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));
Voir également
Catégories
En savoir plus sur Data Type Conversion dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!