#中餐馆两种采样方式:
已知条件概率
##**算法1:**直接从联合分布中采样
N:餐厅的总人数
T:样本总数(采样的次数)
$\alpha $:Dirichlet参数
代码1:
#算法1:直接从联合分布里采样,根据中餐馆条件概率采样,先得到z1,再根据z1得到z2.。。。。最后得到联合概率样本
#N表示中餐馆有10个人,alpha = 3表示dirichlet参数,T=50表示样本数,即迭代多少次
#verbose表示详细信息,verbose=FALSE,意思就是设置运行的时候不显示详细信息
#给定初始Z[0]=1,其他初始化为0
import numpy as np
def Draw_CRP_Direct_Sample(N = 10, alpha = 3, T = 50, VERBOSE = False):
Z_table = np.zeros((T,N))#(T,N)用0填充的数组,数值表示每个人坐的桌子的编号
for t in range(T):
Z = np.zeros(N,dtype=int)#包含N个人的样本
for i in range(N):
if i == 0:
Z[i] = 1#初始化Z[0] = 1,即第一个人坐的的类别
else:
if VERBOSE:
print('初始Z=',Z)#一个样本
unique, counts = np.unique(Z, return_counts=True)
#unique返回样本Z中去重之后的主题编号(从小到大排序),counts计数(主题权重)返回每个主题的个数
#对于一维数组或者