0
votes

Trouvez des probabilités conditionnelles à l'aide de Python

J'ai donné un problème qui me dise explicitement de ne pas utiliser numpy code> et pandas code> pour ceci:

donné une liste de listes, chaque subliste code> sera de longueur 2 c'est-à-dire [[x, y], [p, q], [l, m] .. [r, s]] considérez comme une matrice code> de n Les rangées et deux colonnes p>

La première colonne F ne contiendront que 5 valeurs uniques (F1, F2, F3, F4, F5) La deuxième colonne ne contiendra que 3 valeurs uniques (S1, S2, S3) Votre tâche est de trouver p> xxx pré>

J'ai écrit le code suivant pour ce qui précède, cependant, je reçois l'erreur suivante, et je ne suis pas sûr de ce que le problème est: P>

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


3 commentaires

Pourquoi ne changez-vous pas & vers et ?


Cela a fonctionné, merci. En outre, il y a une faute de frappe dans le code, elle devrait être du dictionnaire2 sous le dictionnaire1 à l'intérieur de la déclaration IF. Cependant, y a-t-il un meilleur moyen de résoudre cette question?


Si vous rencontrez une faute de frappe dans votre question, vous pouvez modifier votre question pour corriger la faute de frappe.


5 Réponses :


0
votes

( les parties retirées de la réponse liées aux parties du code que vous avez déjà fixées )

Notez que lorsque vous appelez un dictionnaire, vous n'avez pas à transmettre le nom de la clé en tant que chaîne - vous peut passer une variable qui contient cette valeur. Par exemple, si d est un dictionnaire et k est une variable égale à 1 , vous pouvez passer d [k] au lieu de d [1] . En utilisant cela, et le fait que vous puissiez "ajouter" des cordes ensemble pour les concaténer (par exemple, 'A' + 'B' = 'AB'), vous pouvez ré-écrire votre Compute_conitiveal_probabilities Fonction comme: < / p> xxx

Voir si cela fonctionne et codage heureux!


0 commentaires

0
votes

Essayez ceci xxx

sortie xxx


3 commentaires

Merci Arun, obtenez la sortie souhaitée. Cependant, y a-t-il un meilleur moyen de résoudre cette question?


@HEMANTHRAVAVARAPU Il y a - vous pouvez éviter les instructions si au total, voir ci-dessous.


@Itamar Mushkin, génial, a mis à jour le code avec votre réponse.



0
votes
A = [['F1','S1'],['F2','S2'],['F3','S3'],['F1','S2'],['F2','S3'],['F3','S2'],['F2','S1'],['F4','S1'],['F4','S3'],['F5','S1']]
compute_conditional_probabilites(A)

print("conditional probability P(F=F1|S==S1)=1/4-----",(listCombine.count('F1S1')/listDen.count('S1')))

0 commentaires

0
votes
A = [['F1','S1'],['F2','S2'],['F3','S3'],['F1','S2'],['F2','S3'],['F3','S2'],['F2','S1'],['F4','S1'],['F4','S3'],['F5','S1']]
from fractions import Fraction
def values(F,S):
    num=0
    den=0
    for i in range(len(A)):
        if(A[i][1]==S):
            den=den+1
            if(A[i][0]==F):
               num=num+1
    print('P(F={}|S=={})='.format(F,S), Fraction(num,den))

for k in ['F1', 'F2', 'F3', 'F4', 'F5']:
    for m in ['S1', 'S2', 'S3']:
        values(k,m)
Try this, worked well for me. coders are welcome to improve this.

0 commentaires

0
votes

Il peut être fait sans fraction aussi bien xxx


0 commentaires