首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python:帮助计算二进制序列中1的比例。

python:帮助计算二进制序列中1的比例。
EN

Stack Overflow用户
提问于 2014-03-19 20:15:03
回答 2查看 101关注 0票数 0

我正在用python编写一个程序。它为宿主随机生成长度为10的二进制字符串,为寄生虫生成长度为7的二进制字符串。我现在需要做的是找到1在每个寄生虫基因组中所占的比例,以及1在整个寄生虫种群中所占的比例。

代码语言:javascript
复制
import random
host_genome_length = 10
parasite_genome_length = 5
host_initial_population=15
parasite_initial_population=10
assert   parasite_initial_population >=0
parasite_initial_chance_1= 0.2
host_initial_chance_1=0.5
hosts=[]
for i  in range(host_initial_population):
    genome= []
    for j in range (host_genome_length):
        if random.random()< host_initial_chance_1:
            genome.append(1)
        else:
            genome.append(0)
    hosts.append(genome)
print "hosts:"
print  hosts

parasites=[]
for i  in range(parasite_initial_population):
    genome= []
    for j in range (parasite_genome_length):
        if random.random()< parasite_initial_chance_1:
            genome.append(1)
        else:
            genome.append(0)
    parasites.append(genome)

for i in range(host_initial_population-parasite_initial_population):
    parasites.append(None)
print "parasites:"
print parasites

例如,如果输出为1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

我需要1在每个序列中的比例和在整个列表中的总比例1?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-19 20:39:10

如果一次只得到一个结果,您可以这样做:

代码语言:javascript
复制
res = [1,0,0,1,1]
proportion = float(res.count(1))/len(res)

如果结果都作为列表返回:

代码语言:javascript
复制
res = [[1, 0, 0, 1, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 0, 1, 0, 0], [1, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 1, 0], None, None, None, None, None]


total = sum([ x.count(1) for x in res if x<> None ]) # ignore the None elements
length = sum([len(x) for x in res if x <> None])
proportion = float(total)/length
票数 0
EN

Stack Overflow用户

发布于 2014-03-19 21:03:57

代码语言:javascript
复制
#pairs of (oneCount, oneProportion)
def prepare(listList):
    result = []
    for subList in listList:
        sLUnitCount = subList.__len__()
        slOneCount = sum(subList)
        result.append((slOneCount, float(slOneCount)/sLUnitCount))
    return result

#individual proportions
def indivProp(listList):
    indiv = prepare(listList)
    return map(lambda x:x[1])

#total proportions
def totalProp(listList):
    indiv = prepare(listList)
    slOnesCounts = map(lambda x:x[0],indiv)
    totalOnes = sum(slOnesCounts)
    slUnitCounts = map(lambda x:x[0]/x[1], indiv)
    totalUnits = sum(slUnitCounts)
    return totalOnes/totalUnits
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22517108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档