determine combination of elements in matrix

5 visualizaciones (últimos 30 días)
JL
JL el 22 de Ag. de 2019
Editada: Adam Danz el 22 de Ag. de 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]

Respuesta aceptada

Adam Danz
Adam Danz el 22 de Ag. de 2019
Editada: Adam Danz el 22 de Ag. de 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 comentarios
JL
JL el 22 de Ag. de 2019
Thank you. I think this works better
Adam Danz
Adam Danz el 22 de Ag. de 2019
Editada: Adam Danz el 22 de Ag. de 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.

Iniciar sesión para comentar.

Más respuestas (1)

Bruno Luong
Bruno Luong el 22 de Ag. de 2019
Editada: Bruno Luong el 22 de Ag. de 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)

Categorías

Más información sobre Resizing and Reshaping Matrices en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by