Как я могу генерировать диапазон случайных чисел с плавающей точкой в ​​Джулии? - PullRequest
0 голосов
/ 31 августа 2018

Я заметил, что rand(x), где x - целое число, дает мне массив случайных чисел с плавающей запятой. Я хочу знать, как я могу генерировать массив случайных переменных типа с плавающей точкой в ​​пределах определенного диапазона. Я попытался использовать диапазон следующим образом:

rand(.4:.6, 5, 5)

И я получаю:

 0.4  0.4  0.4  0.4  0.4
 0.4  0.4  0.4  0.4  0.4
 0.4  0.4  0.4  0.4  0.4
 0.4  0.4  0.4  0.4  0.4
 0.4  0.4  0.4  0.4  0.4

Как получить диапазон вместо самого низкого числа в диапазоне?

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

Возможно, немного более элегантно, так как вы на самом деле хотите брать сэмплы из Uniform-дистрибутива, вы можете использовать пакет Distribution:

julia> using Distributions
julia> rand(Uniform(0.4,0.6),5,5)
5×5 Array{Float64,2}:
 0.547602  0.513855  0.414453  0.511282  0.550517
 0.575946  0.520085  0.564056  0.478139  0.48139
 0.409698  0.596125  0.477438  0.53572   0.445147
 0.567152  0.585673  0.53824   0.597792  0.594287
 0.549916  0.56659   0.502528  0.550121  0.554276

Затем применяется тот же метод из выборки из других хорошо известных или определенных пользователем распределений (просто укажите распределение в качестве первого параметра для rand())

0 голосов
/ 02 сентября 2018

Вы можете сделать это с

julia> map(x->0.4+x*(0.6-0.4),rand(5,5))
5×5 Array{Float64,2}:
 0.455445  0.475007  0.518734  0.463064  0.400925
 0.509436  0.527338  0.566976  0.482812  0.501817
 0.405967  0.563425  0.574607  0.502343  0.483075
 0.50317   0.482894  0.54584   0.594157  0.528844
 0.50418   0.515788  0.5554    0.580199  0.505396

Общее правило:

julia> map(  x -> start + x * (stop - start), rand(5,5)  )

, где начало 0,4, а останов 0,6

Вы даже можете сгенерировать шестигранные кости таким образом, имея х в диапазоне от 1 до 7, который равен 1 <х <7, поскольку вероятность того, что х точно равен 1,0 или 7,0, равна нулю </p>

julia> map(x->Integer(floor(1+x*(7-1))),rand(5,5))
5×5 Array{Int64,2}:
 2  6  6  3  2
 3  1  3  1  6
 5  4  6  1  5
 3  6  5  5  3
 3  4  3  5  4

или вы можете использовать

julia> rand(1:6,5,5)
5×5 Array{Int64,2}:
 3  6  3  5  5
 2  1  3  3  3
 1  5  4  1  5
 5  5  5  5  1
 3  2  1  5  6
0 голосов
/ 31 августа 2018

Вам необходим параметр шага:

rand(.4:.1:.6, 5, 5)

.1 предоставит шаг для вашего диапазона, который необходим для чисел с плавающей запятой и не необходим для увеличения на 1. Проблема заключается в том, что он примет 1 независимо от неявной точности. Если вам нужен более точный прирост, чем выполните следующие действия:

rand(.4:.0001:.6, 5, 5)

Это даст вам результат, который выглядит примерно так:

 0.4587  0.557   0.586   0.4541  0.4686
 0.4545  0.4789  0.4921  0.4451  0.4212
 0.4373  0.5056  0.4229  0.5167  0.5504
 0.5494  0.4068  0.5316  0.4378  0.5495
 0.4368  0.4384  0.5265  0.5995  0.5231
...