Finding index in a set

1 visualización (últimos 30 días)
Md. Nazrul Islam Siddique
Md. Nazrul Islam Siddique el 17 de Dic. de 2022
Editada: Stephen23 el 17 de Dic. de 2022
Hello. I have these two sets.
x1 = [0 , 0, 1, 0]
x2 = [0, 0, 0, 0]
I want to randomly generate one in x2 except the index 3, where the vaule is x1. The output will be look like:
x1 = [0, 0, 1, 0]
x2 = [1, 0, 0, 0] or [0, 1, 0, 0] or [0, 0, 0, 1].
How can I do that?

Respuesta aceptada

Stephen23
Stephen23 el 17 de Dic. de 2022
Editada: Stephen23 el 17 de Dic. de 2022
Simple and efficient:
x1 = [0,0,1,0];
x2 = [0,0,0,0];
ix = find(~x1);
iy = randi(nnz(ix),1);
x2(ix(iy)) = 1
x2 = 1×4
0 0 0 1
  1 comentario
Stephen23
Stephen23 el 17 de Dic. de 2022
Editada: Stephen23 el 17 de Dic. de 2022
Lets try it in a loop:
for k = 1:64
x1 = [0,0,1,0];
x2 = [0,0,0,0];
ix = find(~x1);
iy = randi(nnz(ix),1);
x2(ix(iy)) = 1
end
x2 = 1×4
0 0 0 1
x2 = 1×4
0 0 0 1
x2 = 1×4
0 0 0 1
x2 = 1×4
0 1 0 0
x2 = 1×4
0 0 0 1
x2 = 1×4
0 0 0 1
x2 = 1×4
1 0 0 0
x2 = 1×4
1 0 0 0
x2 = 1×4
1 0 0 0
x2 = 1×4
0 0 0 1
x2 = 1×4
0 0 0 1
x2 = 1×4
1 0 0 0
x2 = 1×4
0 1 0 0
x2 = 1×4
0 0 0 1
x2 = 1×4
0 1 0 0
x2 = 1×4
0 0 0 1
x2 = 1×4
0 0 0 1
x2 = 1×4
0 0 0 1
x2 = 1×4
0 1 0 0
x2 = 1×4
0 1 0 0
x2 = 1×4
1 0 0 0
x2 = 1×4
0 1 0 0
x2 = 1×4
1 0 0 0
x2 = 1×4
0 1 0 0
x2 = 1×4
0 0 0 1
x2 = 1×4
0 0 0 1
x2 = 1×4
1 0 0 0
x2 = 1×4
0 0 0 1
x2 = 1×4
0 1 0 0
x2 = 1×4
0 1 0 0
x2 = 1×4
1 0 0 0
x2 = 1×4
0 1 0 0
x2 = 1×4
1 0 0 0
x2 = 1×4
1 0 0 0
x2 = 1×4
1 0 0 0
x2 = 1×4
1 0 0 0
x2 = 1×4
0 0 0 1
x2 = 1×4
0 1 0 0
x2 = 1×4
0 0 0 1
x2 = 1×4
0 0 0 1
x2 = 1×4
0 0 0 1
x2 = 1×4
0 0 0 1
x2 = 1×4
1 0 0 0
x2 = 1×4
0 1 0 0
x2 = 1×4
1 0 0 0
x2 = 1×4
1 0 0 0
x2 = 1×4
1 0 0 0
x2 = 1×4
1 0 0 0
x2 = 1×4
0 1 0 0
x2 = 1×4
0 0 0 1
x2 = 1×4
0 0 0 1
x2 = 1×4
0 0 0 1
x2 = 1×4
1 0 0 0
x2 = 1×4
0 1 0 0
x2 = 1×4
0 0 0 1
x2 = 1×4
1 0 0 0
x2 = 1×4
0 1 0 0
x2 = 1×4
0 1 0 0
x2 = 1×4
1 0 0 0
x2 = 1×4
0 0 0 1
x2 = 1×4
0 0 0 1
x2 = 1×4
1 0 0 0
x2 = 1×4
0 1 0 0
x2 = 1×4
1 0 0 0

Iniciar sesión para comentar.

Más respuestas (1)

Arif Hoq
Arif Hoq el 17 de Dic. de 2022
Editada: Arif Hoq el 17 de Dic. de 2022
one approach:
x1 = [0 , 0, 1, 0];
x2 = [0, 0, 0, 0];
% [value I]=find(x1==1);
b=perms(x1);
[row,col,v] = find(b(:,3));
b(row,:)=[];
c=b;
output=unique(c,'rows','stable')
output = 3×4
0 1 0 0 0 0 0 1 1 0 0 0
  4 comentarios
Arif Hoq
Arif Hoq el 17 de Dic. de 2022
I am confused. you can make x2 in sveral ways.
x1 = [0 , 0, 1, 0];
x2=circshift(x1,1,2)
x2 = 1×4
0 0 0 1
x3=circshift(x1,2,2)
x3 = 1×4
1 0 0 0
x4=circshift(x1,3,2)
x4 = 1×4
0 1 0 0
Arif Hoq
Arif Hoq el 17 de Dic. de 2022
or using a function
x=4;
shiftv=2;
output=binvector(x,shiftv)
output = 1×4
0 1 0 0
function y=binvector(x,shiftv)
y=zeros(1,x);
y(shiftv)=1;
end

Iniciar sesión para comentar.

Categorías

Más información sobre Get Started with MATLAB en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by