J'ai donné un problème qui me dise explicitement de ne pas utiliser donné une liste de listes, chaque 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> 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> numpy code> et pandas code> pour ceci: 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> 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']))
5 Réponses :
( les parties retirées de la réponse liées aux parties du code que vous avez déjà fixées em>) 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 Voir si cela fonctionne et codage heureux! p> p> d code> est un dictionnaire et k code> est une variable égale à 1 code>, vous pouvez passer d [k] code> au lieu de d [1] code>. 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 code> Fonction comme: < / p>
Essayez ceci sortie p>
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 code> au total, voir ci-dessous.
@Itamar Mushkin, génial, a mis à jour le code avec votre réponse.
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')))
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.
Il peut être fait sans fraction aussi bien
Pourquoi ne changez-vous pas
& code> verset code>?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.