使用python查找条件概率

2024-10-03 06:28:18 发布

您现在位置:Python中文网/ 问答频道 /正文

有一个问题明确告诉我不要使用numpy和{}来完成这个任务:

给定一个列表列表,每个sublist的长度为2,即[x,y],[p,q],[l,m]…[r,s]]考虑其类似于n行和两列的matrix

第一列F只包含5个唯一值(F1、F2、F3、F4、F5) 第二列S将只包含3个唯一值(S1、S2、S3) 你的任务是找到

a. Probability of P(F=F1|S==S1), P(F=F1|S==S2), P(F=F1|S==S3)
b. Probability of P(F=F2|S==S1), P(F=F2|S==S2), P(F=F2|S==S3)
c. Probability of P(F=F3|S==S1), P(F=F3|S==S2), P(F=F3|S==S3)
d. Probability of P(F=F4|S==S1), P(F=F4|S==S2), P(F=F4|S==S3)
e. Probability of P(F=F5|S==S1), P(F=F5|S==S2), P(F=F5|S==S3)
Ex:
[[F1,S1],[F2,S2],[F3,S3],[F1,S2],[F2,S3],[F3,S2],[F2,S1],[F4,S1],[F4,S3],[F5,S1]]

a. P(F=F1|S==S1)=1/4, P(F=F1|S==S2)=1/3, P(F=F1|S==S3)=0/3
b. P(F=F2|S==S1)=1/4, P(F=F2|S==S2)=1/3, P(F=F2|S==S3)=1/3
c. P(F=F3|S==S1)=0/4, P(F=F3|S==S2)=1/3, P(F=F3|S==S3)=1/3
d. P(F=F4|S==S1)=1/4, P(F=F4|S==S2)=0/3, P(F=F4|S==S3)=1/3
e. P(F=F5|S==S1)=1/4, P(F=F5|S==S2)=0/3, P(F=F5|S==S3)=0/3

我为上面的代码编写了以下代码,但是,我得到了以下错误,我不确定是什么问题:

^{pr2}$

另外,我写的代码似乎是实现上述问题的非常糟糕的方法,有更好的方法吗?如果是的话,请你分享。在

A = [['F1','S1'],['F2','S2'],['F3','S3'],['F1','S2'],['F2','S3'],['F3','S2'],['F2','S1'],['F4','S1'],['F4','S3'],['F5','S1']]

dictionary1 = {
 'F1S1':0,
 'F2S1':0,
 'F3S1':0,
 'F4S1':0,
 'F5S1':0,
 'F1S2':0,
 'F2S2':0,
 'F3S2':0,
 'F4S2':0,
 'F5S2':0,
 'F1S3':0,
 'F2S3':0,
 'F3S3':0,
 'F4S3':0,
 'F5S3':0,
}

dictionary2= {
 'S1':0,
 'S2':0,
 'S3':0
}

def compute_conditional_probabilities(A):
    for i in range(len(A)):
        if(A[i][0]=='F1'& A[i][1]=='S1'):
            dictionary1['F1S1'] = dictionary1['F1S1'] +1
            dictionary2['S1'] = dictionary2['S1'] +1
        if(A[i][0]=='F1'&A[i][1]=='S2'):
            dictionary1['F1S2'] = dictionary1['F1S2'] +1
            dictionary2['S2'] = dictionary2['S2'] +1
        if(A[i][0]=='F1'&A[i][1]=='S3'):
            dictionary1['F1S3'] = dictionary1['F1S3'] +1
            dictionary2['S3'] = dictionary2['S3'] +1
        if(A[i][0]=='F2'&A[i][1]=='S1'):
            dictionary1['F2S1'] = dictionary1['F2S1'] +1
            dictionary2['S1'] = dictionary2['S1'] +1
        if(A[i][0]=='F2'&A[i][1]=='S2'):
            dictionary1['F2S2'] = dictionary1['F2S2'] +1
            dictionary2['S2'] = dictionary2['S2'] +1
        if(A[i][0]=='F2'&A[i][1]=='S3'):
            dictionary1['F2S3'] = dictionary1['F2S3'] +1
            dictionary2['S3'] = dictionary2['S3'] +1
        if(A[i][0]=='F3'&A[i][1]=='S1'):
            dictionary1['F3S1'] = dictionary1['F3S1'] +1
            dictionary2['S1'] = dictionary2['S1'] +1
        if(A[i][0]=='F3'&A[i][1]=='S2'):
            dictionary1['F3S2'] = dictionary1['F3S2'] +1
            dictionary2['S2'] = dictionary2['S2'] +1
        if(A[i][0]=='F3'&A[i][1]=='S3'):
            dictionary1['F3S3'] = dictionary1['F3S3'] +1
            dictionary2['S3'] = dictionary2['S3'] +1
        if(A[i][0]=='F4'&A[i][1]=='S1'):
            dictionary1['F4S1'] = dictionary1['F4S1'] +1
            dictionary2['S1'] = dictionary2['S1'] +1
        if(A[i][0]=='F4'&A[i][1]=='S2'):
            dictionary1['F4S2'] = dictionary1['F4S2'] +1
            dictionary2['S2'] = dictionary2['S2'] +1
        if(A[i][0]=='F4'&A[i][1]=='S3'):
            dictionary1['F4S3'] = dictionary1['F4S3'] +1
            dictionary2['S3'] = dictionary2['S3'] +1
        if(A[i][0]=='F5'&A[i][1]=='S1'):
            dictionary1['F5S1'] = dictionary1['F5S1'] +1
            dictionary2['S1'] = dictionary2['S1'] +1
        if(A[i][0]=='F5'&A[i][1]=='S2'):
            dictionary1['F5S2'] = dictionary1['F5S2'] +1
            dictionary2['S2'] = dictionary2['S2'] +1
        if(A[i][0]=='F5'&A[i][1]=='S3'):
            dictionary1['F5S3'] = dictionary1['F5S3'] +1
            dictionary2['S3'] = dictionary2['S3'] +1                                

compute_conditional_probabilities(A)

print('Probability of P(F=F1|S==S1)',(dictionary1['F1S1']/dictionary2['S1']))

Tags: of代码ifs3f5f2f1probability
3条回答

删除了答案中与已修复的部分代码相关的部分)

请注意,在调用字典时,不必将键名作为字符串传递-可以传递保存该值的变量。例如,如果d是一个字典,k是一个等于1的变量,则可以传递d[k],而不是{}。使用此方法,以及您可以将字符串“添加”在一起以连接它们(例如“a”+“b”=“ab”),您可以将compute_conditional_probabilities函数重写为:

def compute_conditional_probabilities(A):
    for i in range(len(A)):
        k = A[i][0]+A[i][1]
        dictionary1[k] += 1
        dictionary2[A[i][1]] += 1

看看这是否有效,快乐的编码!在

listCombine = []
listDen = []

def compute_conditional_probabilites(A):
for i in range(len(A)):
        k = A[i][0]+A[i][1]
        listDen.append(A[i][1])
        listCombine.append(k)
        print(listCombine)
        print(listDen)

在上面的函数中,我只需将一个[0]和一个[1]组合在一起,然后放入一个列表列表combine中,将一个[1]放入list listDen中

^{pr2}$

我数了一下列表中的项目数,找到了条件概率,我不认为这是最好的方法

试试这个

A = [['F1', 'S1'], ['F2', 'S2'], ['F3', 'S3'], ['F1', 'S2'], ['F2', 'S3'], ['F3', 'S2'], ['F2', 'S1'], ['F4', 'S1'], ['F4', 'S3'], ['F5', 'S1']]

dictionary1 = {
'F1S1': 0,
'F2S1': 0,
'F3S1': 0,
'F4S1': 0,
'F5S1': 0,
'F1S2': 0,
'F2S2': 0,
'F3S2': 0,
'F4S2': 0,
'F5S2': 0,
'F1S3': 0,
'F2S3': 0,
'F3S3': 0,
'F4S3': 0,
'F5S3': 0,
}

dictionary2 = {
'S1': 0,
'S2': 0,
'S3': 0
}


def compute_conditional_probabilites(A):
    for i in range(len(A)):
       k = A[i][0] + A[i][1]
       dictionary1[k] += 1
       dictionary2[A[i][1]] += 1

compute_conditional_probabilites(A)
print('Probability of P(F=F1|S==S1)', (dictionary1['F4S3']/dictionary2['S3']))

输出

^{pr2}$

相关问题 更多 >