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 vues (au cours des 30 derniers jours)
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

Réponse acceptée

Jan
Jan le 8 Mai 2022
Modifié(e) : Jan le 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

Plus de réponses (1)

the cyclist
the cyclist le 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

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by