2016-08-29 9 views
-1

関数calc_classによって生成された値を追加しようとしていますが、機能していないため、理由がわかりません。私はnumpy.append,numpy.insertと組み込みのPython関数appendを使用しようとしましたが失敗しました。numpy配列に要素を追加できません

これは、コードの私の作品です:

def calc_class(test): 
    expec = [] 
    for new in test: 
     prob_vector = np.zeros((len(voc)), dtype=bool) #define a 'True' array to store class probabilities 
     words_in_new = new[0].split() #split the new email into words 
     words_in_new = list(set(words_in_new)) #remove duplicated words 
     i = 0 
     for voc_word in voc: #for each element in voc 
      if voc_word in words_in_new: 
       prob_vector[i] = True #set the ith element of prob_vector to True, if voc element is in word 
      else: 
       prob_vector[i] = False #set the ith element of prob_vector to False, otherwise 
      i += 1 
     prob_ham = 1 
     for i in range(len(prob_vector)): 
      if prob_vector[i] == True: 
       prob_ham *= ham_class_prob[i] 
      else: 
       prob_ham *= (1 - ham_class_prob[i]) 
     # alternative:  np.prod(ham_class_prob[np.where(prob_vector==True)]) * np.prod(1- ham_class_prob[np.where(prob_vector==False)]) 

     prob_spam = 1 
     for i in range(len(prob_vector)): 
      if prob_vector[i] == True: 
       prob_spam *= spam_class_prob[i] 
      else: 
       prob_spam *= (1 - spam_class_prob[i]) 

     p_spam = 0.3 
     p_ham = 1 - p_spam 

     p_spam_given_new = (prob_spam * p_spam)/(prob_spam * p_spam + prob_ham * p_ham) # Bayes theorem 
     print('p(spam|new_email)=', p_spam_given_new[0]) 
     expec.append(p_spam_given_new[0]) 
     print(expec) 

問題はprint(expect)は空の配列を印刷しているということです。

+0

(a)質問に表示されているインデント(第三者が編集する前)が間違っていました。インデントを実際に使用しているファイルのインデントと一致させます。あなたが本当に使用しているインデントを推測するように私たちに依頼しないでください。 (b) 'voc'は定義されません。 (c)将来、質問をする前に、[最小限で完全で検証可能なサンプルを作成する方法](http://stackoverflow.com/help/mcve)をお読みください。 – John1024

+0

'append'の前の' print'は何かを生成しますか? – hpaulj

+0

あなたのコードには 'test'、' voc'など4つの未知の変数があります。関数は何も返しません。 'expec.append'は問題ではありません。関数内のその点に到達するだけで問題になります。 – hpaulj

答えて

0

pdb do debug(またはipythonの場合はipdb)を使用できます。

from pdb import set_trace 

使用 "set_trace()" の代わりに|あなたのコードを実行するよりも、(エンドラインから数えて三行目) "印刷(P '(スパムNEW_EMAIL)='、[0]をp_spam_given_new)"。この行では一時停止し、 "print(p_spam_given_new)"や "p_spam_given_new"などのPythonコードを実行することができます。また、 "prob_spam"、 "p_spam"などのチェックする変数をチェックすることもできます。

関連する問題