我在Python中理论上计算了pmf。这是代码。
>>> a_coin = np.array([0,1])>>> three_coins = np.array(np.meshgrid(a_coin,a_coin,a_coin))。T.reshape(-1,3)>>&安培; …
这是一个 fft 基于 numpy 解:
fft
numpy
import numpy as np from scipy import fftpack def toss(n=10, p=0.5): t1 = np.zeros(fftpack.next_fast_len(n+1)) t1[:2] = 1-p, p f1 = fftpack.rfft(t1) c1 = f1[1:(len(t1) - 1) // 2 * 2 + 1].view(f'c{2*t1.itemsize}') c1 **= n f1[::(len(t1) + 1) // 2 * 2 - 1] **= n return fftpack.irfft(f1)[:n+1]
例如:
>>> toss(3) array([0.125, 0.375, 0.375, 0.125]) >>> toss(10) array([0.00097656, 0.00976562, 0.04394531, 0.1171875 , 0.20507813, 0.24609375, 0.20507813, 0.1171875 , 0.04394531, 0.00976562, 0.00097656])
使用Python标准库,您可以将概率作为有理数(这是精确解),例如
from fractions import Fraction from math import factorial n=30 [Fraction(factorial(n), factorial(n - j)) * Fraction(1, factorial(j) * 2 ** n) for j in range(0, n + 1)]
这可以很容易地转换成浮点数,例如
list(map(float, [Fraction(factorial(n), factorial(n - j)) * Fraction(1, factorial(j) * 2 ** n) for j in range(0, n + 1)]))