Finding index in a set

1 Ansicht (letzte 30 Tage)
Md. Nazrul Islam Siddique
Md. Nazrul Islam Siddique am 17 Dez. 2022
Bearbeitet: Stephen23 am 17 Dez. 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?

Akzeptierte Antwort

Stephen23
Stephen23 am 17 Dez. 2022
Bearbeitet: Stephen23 am 17 Dez. 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 Kommentar
Stephen23
Stephen23 am 17 Dez. 2022
Bearbeitet: Stephen23 am 17 Dez. 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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Arif Hoq
Arif Hoq am 17 Dez. 2022
Bearbeitet: Arif Hoq am 17 Dez. 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 Kommentare
Arif Hoq
Arif Hoq am 17 Dez. 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 am 17 Dez. 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

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Get Started with MATLAB finden Sie in Help Center und File Exchange

Produkte


Version

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by