how to change every value not equal to X in every rows

1 vue (au cours des 30 derniers jours)
Isabelle Bouret
Isabelle Bouret le 17 Avr 2019
Commenté : Walter Roberson le 17 Avr 2019
Hi,
I have a matrix (20000x365) and I have a vector(20000x1) in which I have the column assiciate with the number that I DON'T want to change (This number change for every rows) .
For every rows I want to change every colums, beside the one that is in the vector, for 0
EX: matrix [18 3 1 11; 8 10 11 3; 9 14 6 1; 4 3 15 21]
Vector [3,1,3,2]
The answers should be [0 0 1 0; 8 0 0 0; 0 0 6 0; 0 3 0 0]
Thanks for your help!

Réponse acceptée

madhan ravi
madhan ravi le 17 Avr 2019
Modifié(e) : madhan ravi le 17 Avr 2019
Wanted = zeros(size(matrix));
indices=sub2ind(size(matrix),1:size(matrix,1),Vector);
Wanted(indices)=matrix(indices)
  6 commentaires
Isabelle Bouret
Isabelle Bouret le 17 Avr 2019
Thank you!!
I have to modified a llittle bit
Wanted = zeros(size(l_s));
for i=1:L
if Vector(i,:)==0
continue
else
indices=sub2ind(size(Matrice),i,Vector(i,:).');
Wanted(indices)=Matrice(indices);
end
end
This work perfectly event though it may not be efficient
Walter Roberson
Walter Roberson le 17 Avr 2019
If you are going to loop then
Wanted = zeros(size(l_s));
for i = 1:L
if Vector(i) ~= 0
Wanted(i, Vector(i)) = Matrice(i, Vector(i));
end
end
or
Wanted = zeros(size(l_s));
for i = find(Vector)
Wanted(i, Vector(i)) = Matrice(i, Vector(i));
end

Connectez-vous pour commenter.

Plus de réponses (1)

Walter Roberson
Walter Roberson le 17 Avr 2019
Modifié(e) : Walter Roberson le 17 Avr 2019
rows = size(EX_matrix,1);
ind = (1:rows).' + (Vector(:)-1)*rows;
Output = zeros(size(EX_matrix));
Output(ind) = EX_matrix(ind);

Catégories

En savoir plus sur Loops and Conditional Statements 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