determine combination of elements in matrix

3 vues (au cours des 30 derniers jours)
JL
JL le 22 Août 2019
Modifié(e) : Adam Danz le 22 Août 2019
I have a matrix, X
x = [1 1 1 1]
and I know if I introduced one zero to x, possible combination 4^1=4, which gives me, y
y = [0 1 1 1;
1 0 1 1;
1 1 0 1;
1 1 1 0;];
if I introduced two zeros to x, what are possible combinations which gives me, z. Is this correct below? Is there a code to determine the combinations?
z = [0 0 1 1
0 1 0 1
0 1 1 0
1 0 0 1
1 0 1 0
1 1 0 0]

Réponse acceptée

Adam Danz
Adam Danz le 22 Août 2019
Modifié(e) : Adam Danz le 22 Août 2019
You can use combnk() to create the permuted column indices for each row of your matrix and then replace those values by 0.
% Generate some data
z = ones(6,4); % your original matrix
nzeros = 2; % number of zeros to add to each row
Solution:
permIdx = combnk(1:size(z,2), nzeros); %permutation index
linIdx = sub2ind(size(z),repmat(1:size(permIdx),nzeros,1).',sortrows(permIdx));
z(linIdx) = 0;
  2 commentaires
JL
JL le 22 Août 2019
Thank you. I think this works better
Adam Danz
Adam Danz le 22 Août 2019
Modifié(e) : Adam Danz le 22 Août 2019
Glad I could help. If you need to know the number of combinations you can use
numCombo = nchoosek(4,2); % for 4 columns, 2 zeros.
% = 6, so you would need 6 rows.

Connectez-vous pour commenter.

Plus de réponses (1)

Bruno Luong
Bruno Luong le 22 Août 2019
Modifié(e) : Bruno Luong le 22 Août 2019
lgt = 4; % number of elements
nz = 2; % number of 0s
j = nchoosek(1:lgt,lgt-nz);
i = repmat((1:size(j,1))',[1 size(j,2)]);
z = accumarray([i(:),j(:)],1)
  1 commentaire
JL
JL le 22 Août 2019
Thank you very much!

Connectez-vous pour commenter.

Catégories

En savoir plus sur Shifting and Sorting Matrices 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!

Translated by