# determine combination of elements in matrix

7 views (last 30 days)
JL on 22 Aug 2019
Edited: Adam Danz on 22 Aug 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]

Adam Danz on 22 Aug 2019
Edited: Adam Danz on 22 Aug 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 CommentsShowHide 1 older comment
Adam Danz on 22 Aug 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.

Bruno Luong on 22 Aug 2019
Edited: Bruno Luong on 22 Aug 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)
JL on 22 Aug 2019
Thank you very much!