ฉันมีการกระจายพลังงานตามกฎกำลัง และฉันต้องการเลือกพลังงานแบบสุ่มตามการกระจาย ฉันลองทำสิ่งนี้ด้วยตนเองโดยใช้ตัวเลขสุ่ม แต่มันก็ไม่มีประสิทธิภาพเกินไปสำหรับสิ่งที่ฉันต้องการทำ ฉันสงสัยว่ามีวิธีใดที่เป็นตัวเลข (หรืออื่นๆ) ที่ทำงานเหมือน numpy.random.normal
ยกเว้นว่าแทนที่จะใช้การแจกแจงแบบปกติ อาจมีการระบุการแจกแจงแทน ดังนั้นในใจของฉันตัวอย่างอาจมีลักษณะดังนี้ (คล้ายกับ numpy.random.normal):
import numpy as np
# Energies from within which I want values drawn
eMin = 50.
eMax = 2500.
# Amount of energies to be drawn
n = 10000
photons = []
for i in range(n):
# Method that I just made up which would work like random.normal,
# i.e. return an energy on the distribution based on its probability,
# but take a distribution other than a normal distribution
photons.append(np.random.distro(eMin, eMax, lambda e: e**(-1.)))
print(photons)
การพิมพ์ photons
ควรให้รายการความยาว 10,000 รายการที่มีพลังงานในการแจกแจงนี้แก่ฉัน ถ้าผมทำฮิสโตแกรม มันจะมีค่าถังขยะมากกว่ามากที่พลังงานต่ำกว่า
ฉันไม่แน่ใจว่ามีวิธีดังกล่าวหรือไม่ แต่ดูเหมือนว่าควรจะเป็นเช่นนั้น ฉันหวังว่ามันชัดเจนว่าฉันต้องการทำอะไร
แก้ไข:
ฉันเคยเห็น numpy.random.power
แล้ว แต่เลขชี้กำลังของฉันคือ -1 ดังนั้นฉันไม่คิดว่ามันจะใช้ได้