2014-06-20 2 views
20

Я проникаю от matlab к julia, и я пытаюсь сгенерировать случайное число в диапазоне от 1: пГенерация случайное целое число в диапазоне в Джулии

для n < 21,

rand(r[1:n]) работы.

однако для n > 20, например rand(r[1:21])

Я получаю это сообщение.

ERROR: BoundsError() in getindex at range.jl:121

+0

Что такое 'r'? Может быть, 20-элементный вектор? 'rand (1: n)' должно быть все, что вам нужно, если я правильно вас понимаю. –

+0

Что такое 'r'? Попробуйте 'rand (1:21)'. – jverzani

ответ

28

Вы можете дать диапазон в качестве первого аргумента rand, как в rand(1:n):

julia> rand(1:10) 
7 

julia> rand(1:10,10,10) 
10x10 Array{Int64,2}: 
10 2 5 8 5 5 3 7 1 3 
    5 1 4 2 4 4 1 6 6 9 
    8 1 3 9 4 8 7 8 7 10 
    3 8 1 5 7 9 7 8 10 7 
    5 8 5 6 6 2 2 7 4 3 
10 4 8 8 10 5 1 10 5 1 
    6 1 8 1 6 5 7 10 6 10 
    5 10 2 5 4 5 4 1 3 9 
    5 4 6 4 4 1 7 8 1 5 
10 2 6 4 3 10 7 3 8 7 

Первый аргумент общей rand функции обычно дает «вещь для выборки из», будь то диапазон значений или объект распределения, как определено в Distributions.jl.

+0

Использует ли «rand (S)» единую выборку или другое распределение вероятности по «S»? Я имею в виду, если бы я хотел генерировать равномерное случайное целое, я обычно делаю 'rand (Uniform (1, n))', тогда я применяю 'ceil (Int, ...)' или 'floor (Int, ...)' , Но я думаю, что запись «rand (1: n)» гораздо правильнее, если выборка выполняется равномерно. – Ribz

Смежные вопросы