python - 条件概率 - Python
问题描述
我正在解决这个 python 问题:
给定 DNA 碱基 {A, C, G, T} 的序列,存储为字符串,返回数据结构中的条件概率表,以便可以查找一个碱基 (b1),然后查找第二个碱基 (b2) ,以获得第二个碱基在第一个碱基之后立即发生的概率 p(b2 | b1)。(假设 seq 的长度 >= 3,并且从未一起见过的任何 b1 和 b2 的概率为 0。忽略 b1 后面跟着字符串结尾的概率。)
您可以使用 collections 模块,但不能使用其他库。
但是我遇到了障碍:
word = 'ATCGATTGAGCTCTAGCG'
def dna_prob2(seq):
tbl = dict()
levels = set(word)
freq = dict.fromkeys(levels, 0)
for i in seq:
freq[i] += 1
for i in levels:
tbl[i] = {x:0 for x in levels}
lastlevel = ''
for i in tbl:
if lastlevel != '':
tbl[lastlevel][i] += 1
lastlevel = i
for i in tbl:
print(i,tbl[i][i] / freq[i])
return tbl
tbl['T']['T'] / freq[i]
基本上,最终结果应该是tbl
您在上面看到的最后一行。但是,当我尝试在print(i,tbl[i][i] /freq[i)
和 run中执行此操作时dna_prob2(word)
,所有内容都会得到 0.0s。
想知道这里是否有人可以提供帮助。
谢谢!
解决方案
我不确定您的代码在做什么,但这有效:
def makeprobs(word):
singles = {}
probs = {}
thedict={}
ll = len(word)
for i in range(ll-1):
x1 = word[i]
x2 = word[i+1]
singles[x1] = singles.get(x1, 0)+1.0
thedict[(x1, x2)] = thedict.get((x1, x2), 0)+1.0
for i in thedict:
probs[i] = thedict[i]/singles[i[0]]
return probs
推荐阅读
- python - 我怎样才能循环这段代码直到等于零?
- list - 在 Kotlin 中按分隔符拆分列表
- python - 查找数据集中上升和下降值的差异
- java - java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 错误
- vb.net - 复制的文本框在 IDE 中不可见
- docker - FastAPI gunicorn 添加日志时间戳
- javascript - TypeError:无法读取未定义的属性“属性”
- javascript - 如何用动态内容填充 Vue JS + Bootstrap 应用程序中的背景图像?
- javascript - Javascript存储在数组中
- angular - Add Google Maps API to Angular project as a component