ค้นหาจำนวนเต็มของรายการจากรายการที่กำหนดความน่าจะเป็น

สมมติว่าฉันมีรายการที่มีความยาว 20 และทุกๆ วัน ฉันต้องการค้นหาจำนวนเต็มของรายการจากรายการนี้โดยพิจารณาจากความน่าจะเป็นที่แน่นอน หลังจากแยกจำนวนรายการจำนวนเต็มแล้ว ฉันต้องการดำเนินการเพิ่มเติม

m = [10,20,30,40, 50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200]
prob = 0.2

ในตัวอย่างข้างต้น ฉันต้องการค้นหาว่าโดยเฉลี่ยในแต่ละวันจะมีรายการให้เลือกกี่รายการ โดยพิจารณาจากความน่าจะเป็น 0.2 ดังนั้นโดยเฉลี่ยแล้ว จากรายการความยาว 20 และความน่าจะเป็น 0.2 ฉันควรจะได้จำนวนรายการ = 4 ทุกวัน ฉันจะรับจำนวนเหตุการณ์ที่มีความน่าจะเป็นใน Python ได้อย่างไร ฉันควรใช้ Poisson เพื่อรับจำนวนเหตุการณ์ในช่วงเวลาหนึ่ง แต่ฉันไม่แน่ใจว่าจะรวมขนาดของรายการในฟังก์ชัน Poisson ใน Python ได้อย่างไร และจะรับจำนวนเต็มของรายการได้อย่างไรเมื่อความน่าจะเป็นคือ 0.113 หรือ 0.31 เป็นต้น ฉันจะรับสิ่งนี้ใน Python ได้อย่างไร


person HT121    schedule 15.08.2019    source แหล่งที่มา
comment
prob * len(m)? ดูเหมือนคุณจะซับซ้อนเกินไป   -  person John Coleman    schedule 15.08.2019
comment
ความน่าจะเป็นกับจำนวนข้อที่เลือกมีความสัมพันธ์กันหรือไม่?? ฉันไม่เชื่อว่าจะมีเลย?   -  person Anwarvic    schedule 15.08.2019
comment
มันควรจะเป็น int(prob * len(m)) อย่างที่ John Coleman พูดหรือเปล่า?   -  person ivallesp    schedule 15.08.2019


คำตอบ (2)


สมมติว่าการเลือกหรือไม่ของแต่ละองค์ประกอบรายการเป็นเหตุการณ์อิสระที่มีความน่าจะเป็น prob จำนวนรายการที่เลือกจะเป็นตัวแปรสุ่มทวินามที่มีพารามิเตอร์ len(m) และ prob ค่าที่คาดหวังของตัวแปรสุ่มดังกล่าวคือ prob * len(m)

หากคุณต้องการ จำลอง ตัวแปรสุ่มนี้ (แทนที่จะคำนวณค่าที่คาดหวัง) คุณสามารถใช้:

import random

def binomial_variate(n,p):
    return sum(random.random() < p for _ in range(n))

ตัวอย่างเช่น,

>>> trials = [binomial_variate(20,0.12) for _ in range(100)]
>>> trials
[5, 6, 2, 1, 2, 4, 3, 3, 2, 3, 4, 1, 3, 2, 2, 3, 1, 0, 2, 4, 6, 1, 1, 2, 2, 3, 4, 2, 2, 1, 2, 1, 3, 4, 2, 3, 2, 2, 4, 4, 5, 1, 1, 1, 1, 2, 2, 3, 2, 2, 5, 4, 4, 1, 4, 4, 3, 5, 2, 3, 2, 4, 3, 4, 4, 2, 2, 1, 2, 1, 2, 1, 3, 0, 4, 3, 2, 4, 1, 2, 1, 2, 3, 2, 2, 3, 2, 1, 4, 4, 2, 2, 2, 2, 2, 3, 3, 3, 4, 2]
>>> sum(trials)/100
2.55
>>> 20*0.12
2.4
person John Coleman    schedule 15.08.2019
comment
Prob * len(m) ทำงานได้ดีเมื่อคุณได้เลขจำนวนเต็มจากการคูณนี้ แต่เมื่อคุณได้เลขทศนิยม คุณจะต้องปัดเศษโดยใช้ int(len(m) * prob) สมมติว่าความยาวคงที่ของรายการ 20 และ prob = 0.113 คุณจะได้ 2.26 และด้วย int() คุณจะได้ 2 มันจะทำให้เกิดความแตกต่างอย่างมากในการนับทั้งหมดหลังจากวาดจำนวนองค์ประกอบ 1,000 ครั้ง (2*1,000 เทียบกับ 2.26 *1,000) มีวิธีอื่นใดในการรับจำนวน int ของรายการโดยตรงจากการคำนวณความน่าจะเป็นโดยไม่ต้องใช้ int() ซึ่งคล้ายกับการแจกแจงแบบปัวซองโดยจะส่งกลับจำนวนเต็มของเหตุการณ์ในช่วงเวลาหนึ่ง) - person HT121; 15.08.2019
comment
@ HT121 จำนวนที่ต้องการ คือ prob * len(m) ฉันไม่เข้าใจว่าทำไมคุณถึงต้องการปัดเศษคำตอบที่มีความหมายทางคณิตศาสตร์ให้กับบางสิ่งที่ไม่สมเหตุสมผลเท่าไหร่ หากไม่ใช่จำนวนที่คาดหวังที่คุณพยายามคำนวณ คุณกำลังพยายามทำอะไร โปรดทราบว่าเมื่อคุณทำการทดสอบ จำนวนจริงที่เลือกจะเป็นจำนวนเต็ม แต่จะแตกต่างกันไปในแต่ละการทดลอง เมื่อคุณเฉลี่ยการทดลองดังกล่าวหลายครั้ง ผลลัพธ์ไม่จำเป็นต้องเป็นจำนวนเต็ม - person John Coleman; 15.08.2019
comment
จริงๆ แล้ว ฉันจำเป็นต้องค้นหาจำนวนตัวแทนที่จะย้ายไปยังสถานที่ใหม่ทุกๆ 24 ชั่วโมง ดังนั้นจำนวนตัวแทนเหล่านี้ต้องเป็นจำนวนเต็มเท่านั้น ฉันสามารถเลือกตัวแทนแบบสุ่มตามความน่าจะเป็นและย้ายมันได้ แต่ปัญหาคือ ฉันต้องดูก่อนว่าสถานที่ใหม่มีที่ว่างเพื่อรองรับตัวแทนใหม่หรือไม่ ดังนั้นฉันจึงต้องการแยกจำนวนเจ้าหน้าที่ที่จะย้ายภายใน 24 ชั่วโมงข้างหน้าก่อน จากนั้นทุกครั้งที่ขั้นตอนที่มีขนาดเล็กมาก ฉันจะคอยมองหาพื้นที่ว่างในตำแหน่งถัดไปหรือไม่ เมื่อพร้อมใช้งาน ฉันจะสุ่มเลือกเอเจนต์แล้วย้ายและลบ 1 จากตัวแปรการนับ - person HT121; 15.08.2019
comment
แต่ยังไงก็ขอบคุณ คำตอบของคุณถูกต้องสมบูรณ์สำหรับกรณีทั่วไป - person HT121; 15.08.2019
comment
@ HT121 ฉันได้เพิ่มข้อมูลเกี่ยวกับวิธีการจำลองตัวแปรสุ่ม (โมดูลสุ่มของ Python ไม่มีวิธีโดยตรงในการสร้างตัวแปรสุ่มดังนั้นคุณต้องเขียนฟังก์ชันของคุณเอง (หรือใช้โมดูลอื่น)) - person John Coleman; 15.08.2019
comment
การแก้ไขครั้งล่าสุดของคุณค่อนข้างใกล้เคียงกับสิ่งที่ฉันต้องการมากขึ้น ขอบคุณ - person HT121; 15.08.2019

คุณสามารถใช้บางอย่างเช่น int(len(m) * prob) ในโค้ด python ของคุณและมันจะทำตามเคล็ดลับ อย่าลืมล้อมด้วย try/catch เพื่อหลีกเลี่ยงข้อผิดพลาด
คุณควรตรวจสอบด้วยว่าค่า prob ประกอบด้วยค่าระหว่าง 0 ถึง 1

person cocool97    schedule 15.08.2019