如果value> 1,则用随机数替换数组中的值

时间:2018-09-10 11:48:03

标签: arrays matlab random

我有一个数组(1000 x 8),该值是由一个对数正态分布生成的,表示一个小时后表面上细菌的死亡百分比。问题是某些值大于100%,所以我想用0到1之间的随机值替换它们。

dieOff=zeros(1000,8); %make empty 1000X8 array
m = 0.9; % 90% die-off
v = 0.01;% std from experiment


mu = log((m^2)/sqrt(v+m^2)); %conver to lognorm
sigma = sqrt(log(v/(m^2)+1));

dieOff=lognrnd(mu,sigma,n,k);% generate values

dieOff(dieOff>1)=rand(); %replace with random

但是看起来rand()仅产生1个值,并用相同的值替换所有大于1的值,这不是我想要的值。如何以整齐的格式解决此问题?

histogram(dieOff) 

enter image description here

1 个答案:

答案 0 :(得分:3)

rand()给出一个数字,即您将 all 值替换为相同的随机常量。而是对每个事件使用随机数:

dieOff(dieOff>1)=rand(nnz(dieOff>1),1);

rand(n,k)为您提供一个由0到1之间的随机数组成的 n -by- k 矩阵。rand(n)为您提供了一个 n -by- n 随机数矩阵(即正方形),因此对于n=1,它是单个数字。 rand()代表rand(1)