I have a 4x4 array of 1's and I need to turn 3 of 4 ones to zero per row at random. So there will be a one 1 left in each row.

2 Ansichten (letzte 30 Tage)
A = [1 1 1 1; 1 1 1 1; 1 1 1 1; 1 1 1];
B = [1 0 0 0; 0 0 1 0; 0 1 0 0; 0 0 0 1]; % An example

Akzeptierte Antwort

Jan
Jan am 8 Mai 2022
Bearbeitet: Jan am 9 Mai 2022
Instead of starting with ones and set all but one to zero, it is cheaper to start with zeros and set one element to 1 per row:
n = 4;
A = zeros(n, n);
A(sub2ind([n, n], 1:n, randi([1,n], 1, n))) = 1
A = 4×4
0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 1

Weitere Antworten (1)

the cyclist
the cyclist am 8 Mai 2022
Here is one way:
N = 4;
x = (1:N)';
y = randi(N,N,1);
linearIndex = sub2ind([N,N],x,y);
B = zeros(N,N);
B(linearIndex) = 1
B = 4×4
0 1 0 0 0 0 0 1 0 0 1 0 0 0 1 0

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by