วิธีรับตัวเลขสุ่มระหว่างช่วงทศนิยม?


414

randrange(start, stop)รับอาร์กิวเมนต์เป็นจำนวนเต็มเท่านั้น ดังนั้นฉันจะได้รับตัวเลขสุ่มระหว่างค่าทศนิยมสองค่าอย่างไร


2
หากคุณต้องการจำนวนมากnp.random.uniform(start, stop)หรือnp.random.uniform(start, stop, samples)ถ้าคุณต้องการตัวอย่างหลาย ๆ มิฉะนั้นคำตอบด้านล่างจะดีที่สุด
sachinruk

คำตอบ:


650

ใช้random.uniform (a, b) :

>>> random.uniform(1.5, 1.9)
1.8733202628557872

4
ทฤษฎีนี้สามารถผลิต 1.5 และ 1.9 ได้ไหม? หรือมันจะผลิตเพียง 1.50 ~ 1 และ 1.89 ~
Musixauce3000

14
@ Musixauce3000 คำตอบสั้น ๆ : ใช่ คำตอบอีกต่อไป: ถ้าคุณดูที่เอกสารที่ระบุReturns a random floating point number N such that a <= N <= b for a <= b and b <= N <= a for b < aในคำอื่น ๆ ที่ส่งออกNสามารถเท่ากับการป้อนข้อมูลอย่างใดอย่างหนึ่งและa bในกรณีนี้และ1.5 1.9
Dan

มีวิธีอื่นในการทำเช่นนี้โดยไม่ใช้.uniformฟังก์ชั่น แต่แทนที่จะใช้อย่างใดอย่างหนึ่ง.randomหรือrandrange?
DerryckDX

1
@DerryckDX 1.5 + random.random() * (1.9 - 1.5)ควรทำแม้ว่าตามรายละเอียดนี้จะไม่กลับมาแน่นอน1.9(แม้ในทางทฤษฎี)
Yonatan N

@ Musixauce3000 ดูเหมือนว่าuniform(a, b)จะดำเนินการเป็นa + (b-a) * random()และส่งกลับตัวเลขสุ่มในช่วง [A, B) หรือ [a, b] ขึ้นอยู่กับการปัดเศษ github.com/python/cpython/blob/...
พาเวล

74

random.uniform(a, b)ดูเหมือนจะเป็นสิ่งที่คุณมองหา จากเอกสาร:

ส่งคืนตัวเลขทศนิยมแบบสุ่มที่ N ซึ่ง <= N <= b สำหรับ <= b และ b <= N <= a สำหรับ b <a

ดูที่นี่


47

หากคุณต้องการสร้างการลอยแบบสุ่มด้วยตัวเลข N ทางด้านขวาของจุดคุณสามารถทำสิ่งนี้:

round(random.uniform(1,2), N)

อาร์กิวเมนต์ที่สองคือจำนวนทศนิยม


ฉันไม่รู้ว่าทำไมมันถึงไม่มี upvotes มากกว่าคนอื่น ๆ ไม่มีกลไกการปัดเศษ
TheTechRobo36414519

2

ส่วนใหญ่คุณจะใช้:

import random
random.uniform(a, b) # range [a, b) or [a, b] depending on floating-point rounding

Python จัดเตรียมการแจกแจงอื่น ๆหากคุณต้องการ

หากคุณnumpyนำเข้าแล้วคุณสามารถใช้สิ่งที่เทียบเท่าได้:

import numpy as np
np.random.uniform(a, b) # range [a, b)

อีกครั้งถ้าคุณต้องการกระจายอื่นnumpyให้การกระจายเช่นเดียวกับงูหลามเช่นเดียวกับคนอีกมากมาย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.