Borrar filtros
Borrar filtros

How to remove a value from a vectort and revaluate it?

1 visualización (últimos 30 días)
Danielle
Danielle el 27 de Nov. de 2012
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 comentario
David C
David C el 27 de Nov. de 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)=[];

Iniciar sesión para comentar.

Respuestas (2)

Thomas
Thomas el 27 de Nov. de 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

Matt Fig
Matt Fig el 27 de Nov. de 2012
Editada: Matt Fig el 27 de Nov. de 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

Categorías

Más información sobre Calendar en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by