How to remove a value from a vectort and revaluate it?
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi
I'm trying to create a vector from a random number drawn from a normal distribution.
maxiter=1000;
M=zeros(maxiter,1);
M=(0.8+0.8*randn(maxiter,1));
Because negative numbers don't make any biological sense in this case, I would like have the negative values redrawn from the randn
if M<0;
Mtemp=M;
while Mtemp<0;
Mtemp=(0.8+0.8*randn);
M=Mtemp;
end
else M=M;
end;
This does not seem replace any of the negative values. Thanks for the help!
1 commentaire
David C
le 27 Nov 2012
I believe you need to look into logical indexing.
Matlab's specialty when dealing with matrices and vectors is logical indexing, so instead of your if/else block, you can simply use M(M<0)=[];
Réponses (2)
Thomas
le 27 Nov 2012
Just editing your code..
maxiter=1000;
M=zeros(maxiter,1);
M=(0.8+0.8*randn(maxiter,1));
for ii=1:length(M)
if M(ii)<0;
Mtemp=0.8+0.8*randn;
while Mtemp<0;
Mtemp=(0.8+0.8*randn);
M(ii)=Mtemp;
end
M(ii)=Mtemp;
end
end
0 commentaires
Matt Fig
le 27 Nov 2012
Modifié(e) : Matt Fig
le 27 Nov 2012
There is no need to pre-allocate M, as M is not built in a FOR loop. You are just overwriting the pre-allocation in one call, so it is not necessary at all.
maxiter = 1000;
M = 0.8 + 0.8*randn(maxiter,1);
idx = M<0;
while any(idx)
M(idx) = 0.8+0.8*randn(sum(idx),1);
idx = M<0;
end
0 commentaires
Voir également
Catégories
En savoir plus sur Calendar 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!