首页 > 解决方案 > 使用python查找条件概率

问题描述

我遇到了一个明确告诉我不要使用numpyandpandas为此的问题:

给定一个列表列表,每个列表sublist的长度为 2,即 [[x,y],[p,q],[l,m]..[r,s]] 认为它类似于matrixn 行和两列

第一列 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

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

unsupported operand type(s) for &: 'str' and 'str'

另外,我写的代码似乎是实现上述问题的非常糟糕的方法,有没有更好的方法?如果是这样,会要求你分享它。

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']))

标签: pythonpython-3.x

解决方案


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

请注意,在调用字典时,您不必将键名作为字符串传递 - 您可以传递保存该值的变量。例如,如果d是一个字典并且k是一个等于 的变量1,您可以通过d[k]而不是d[1]. 使用它,以及您可以将字符串“添加”在一起以连接它们的事实(例如'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

看看这是否有效,并且编码愉快!


推荐阅读