Питон, вероятность - PullRequest
       3

Питон, вероятность

1 голос
/ 12 декабря 2010

Мой код следующий:

with open("test.txt") as f_in:
    for line in f_in:
        for char in line:
            frequencies[char] += 1

list= [(count, char) for char, count in frequencies.iteritems()]

Этот код открыть test.txt , прочитать каждую строку и подписать список в форме, например: [(3,'а'), .........] .Это означает, что во всем текстовом файле есть три a и так далее ...

Мне нужно вычислить это число, вместо 3 , мне нужно [3/ номер всего знака] .Так что мне не нужно количество знаков, например, a в тексте, но мне нужна вероятность знака a.

Так что если в тексте (test.txt) будет "aaab", мне нужен вывод "list": [(0.75, 'a'), (0.25, 'b')]

Большое спасибо за помощь.


EDIT2

import collections
frequencies = collections.defaultdict(int)



with open("test.txt") as f_in:
    for line in f_in:
        for char in line:
            frequencies[char] += 1
total = float(sum(frequencies.keys()))

verj= [(count/total, char) for char, count in frequencies.iteritems()]

Это не работает, выведите ошибку:

total = float(sum(frequencies.keys()))

TypeError: неподдерживаемые типы операндов для+: 'int' и 'str'

Ответы [ 3 ]

1 голос
/ 12 декабря 2010

Вы почти там.

with open("test.txt") as f_in:
    for line in f_in:
        for char in line:
            frequencies[char] += 1
total = float(sum(frequencies.values()))
symbols = [(count/total, char) for char, count in frequencies.iteritems()]

Обратите внимание, что я переименовал ваш результирующий список, потому что list - это имя встроенного, и вы не должны использовать его для именования переменных илифункции.

1 голос
/ 12 декабря 2010

Если frequencies = {"a": 3, "b": 4}, то frequencies.values() дает нам [3, 4], и мы можем вычислить сумму:

total = float(sum(frequencies.values()))

, а затем вероятности:

probs = [(count / total, char) for char, count in frequencies.iteritems()]

Обратите внимание, что Python возвращает целое число при делении двух целых чисел, поэтому я сначала преобразовал сумму в число с плавающей точкой:

Python 2.7 (r27:82508, Jul  3 2010, 21:12:11) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 3 / 4
0
>>> 3 / 4.0
0.75
0 голосов
/ 12 декабря 2010

Быстро и грязно:

   counter = 0
   with open("test.txt") as f_in:
        for line in f_in:
            for char in line:
                frequencies[char] += 1
                counter += 1

    list= [(count / counter, char) for char, count in frequencies.iteritems()]
...