2016-08-29 4 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

Делает ли 'print' перед' append' что-нибудь? – hpaulj

+0

В вашем коде есть 4 неизвестных переменных - 'test',' voc' и т. Д. И функция ничего не возвращает. 'Expec.append' не является проблемой; просто добраться до этой точки в функции является проблемой. – hpaulj

ответ

0

Вы можете использовать pdb do debug (или ipdb для ipython).

from pdb import set_trace 

использование "set_trace()" вместо "печати ('р (спам | NEW_EMAIL) =', p_spam_given_new [0])" (третья строка подсчитываются с конца строки), чем запустить свой код. Он остановится на этой строке, и вы можете запустить любой код python, например «print (p_spam_given_new)» или просто «p_spam_given_new», вы также можете проверить «prob_spam», «p_spam» или любую другую переменную, которую вы хотите проверить.

Смежные вопросы