2014-06-20 2 views
20

ich matlab-julia bin Migration und ich versuche, eine Zufallszahl in dem Bereich zu erzeugen 1: nGenerierung von Zufallszahl in Bereich in julia

für n < 21,

rand(r[1:n]) funktioniert.

jedoch für n > 20, z rand(r[1:21])

Ich erhalte diese Meldung.

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

+0

Was ist 'r'? Ein Vektor mit 20 Elementen, vielleicht? 'rand (1: n)' sollte alles sein, was du brauchst, wenn ich dich richtig verstehe. –

+0

Was ist 'r'? Probiere 'rand (1:21)'. – jverzani

Antwort

28

Sie einen Bereich als erstes Argument zu rand geben können, wie in 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 

Das erste Argument für die allgemeine Regel rand Funktion ein „Ding aus zu probieren“ gibt, es sein eine Reihe von Werten oder ein Verteilungsobjekt wie in Distributions.jl definiert.

+0

Verwendet 'rand (S)' eine einheitliche Stichprobe oder andere Wahrscheinlichkeitsverteilung über 'S'? Ich meine, wenn ich uniforme zufällige ganze Zahl erzeugen möchte, mache ich normalerweise 'rand (Uniform (1, n))', dann wende ich ceil (Int, ...) 'oder' floor (Int, ...) 'an . Aber ich denke, dass das Schreiben von 'rand (1: n)' viel korrekter ist, wenn das Sampling einheitlich durchgeführt wird. – Ribz