How to remove a value from a vectort and revaluate it?
1 次查看(过去 30 天)
显示 更早的评论
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 个评论
David C
2012-11-27
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)=[];
回答(2 个)
Thomas
2012-11-27
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 个评论
Matt Fig
2012-11-27
编辑:Matt Fig
2012-11-27
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 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Calendar 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!