Azzera filtri
Azzera filtri

determine combination of elements in matrix

1 visualizzazione (ultimi 30 giorni)
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]

Risposta accettata

Adam Danz
Adam Danz il 22 Ago 2019
Modificato: Adam Danz il 22 Ago 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 Commenti
JL
JL il 22 Ago 2019
Thank you. I think this works better
Adam Danz
Adam Danz il 22 Ago 2019
Modificato: Adam Danz il 22 Ago 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.

Accedi per commentare.

Più risposte (1)

Bruno Luong
Bruno Luong il 22 Ago 2019
Modificato: Bruno Luong il 22 Ago 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)

Categorie

Scopri di più su Shifting and Sorting Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by