Подставьте значения в массиве случайным числом, если значение> 1 - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть массив (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 голосов
/ 10 сентября 2018

rand() дает одно число, т. Е. Вы заменяете все значения на те же, случайные, постоянные. Вместо этого используйте случайное число для каждого вхождения:

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

rand(n,k) дает вам n -by- k матрицу случайных чисел между 0 и 1. rand(n) дает вам n -б - n матрица случайных чисел (т. Е. Квадрат), поэтому для n=1 это одно число. rand() это сокращение от rand(1).

...