我正在用python编写一个程序。它为宿主随机生成长度为10的二进制字符串,为寄生虫生成长度为7的二进制字符串。我现在需要做的是找到1在每个寄生虫基因组中所占的比例,以及1在整个寄生虫种群中所占的比例。
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?
发布于 2014-03-19 20:39:10
如果一次只得到一个结果,您可以这样做:
res = [1,0,0,1,1]
proportion = float(res.count(1))/len(res)如果结果都作为列表返回:
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发布于 2014-03-19 21:03:57
#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/totalUnitshttps://stackoverflow.com/questions/22517108
复制相似问题