所以,基本上,我有一个python 2.7的代码如下:
femalebreeders = [[[0] * 4] * n] * pat
femalebreeders1 = [[[0] * 4] * n] * pat
for y in range(pat):
for x in range(n):
Indivmales[y][x] = malebreeders[y][x][0] + malebreeders[y][x][3]
Fec1[y] = 1 - c * numpy.array(numpy.mean(Indivmales[y]))
FecMales = numpy.ndarray.tolist(1 + (numpy.array(Indivmales) * b) - (numpy.array(Indivmales) * u))
Fec = [0 if i < 0 else i for i in Fec1]
FecPop = numpy.mean(Fec)
FecCalcF[y] = (Fec[y] * (1 - mf)) / ((Fec[y] * (1 - mf)) + (FecPop * mf))
FecCalcF2[y] = (Fec[y] * mf) / FecPop
FecCalcM[y] = (Fec[y] * (1 - mm)) / ((Fec[y] * (1 - mm)) + (FecPop * mm))
FecCalcM2[y] = (Fec[y] * mm) / FecPop
for x in range(n):
for y in range(pat):
if random.random() < FecCalcF[y]:
z = y
else:
z = numpy.random.choice(pat, p=numpy.ndarray.tolist(numpy.array(FecCalcF2)/sum(FecCalcF2)))
f = random.randrange(n)
m = random.randrange(n)
if random.random() < mut:
if random.random() < 0.5:
femalebreeders1[y][x][0] = femalebreeders[z][f][0] + \
random.uniform(-1, 1)
一些背景。n是个体数,pat是个体所在的斑块数。FecCalcF和FecCalcF2只是表示个人是否要迁移的变量(假设他们总是迁移到新的补丁)。 所以,我想,为每个个体,分配一个补丁(y)。而且,因为它们总是迁徙,它们的父母来自另一个斑块(z),这取决于每个斑块上个体的繁殖力。 最后,我希望有不同的女性来自不同的补丁。但是,女性繁殖者的值类似于([0.10,0,0,0],[0.10,0,0]。。。。]. 基本上,第一个值对于所有值都是相等的(对于其他值也是一样的,我只是展示了其中的一部分)。基本上,代码似乎总是给它们相同的值——这意味着父代都是相同的,并且都来自同一个补丁。有人知道我做错了什么吗?你知道吗
使用乘法运算符初始化列表时要小心。如果你这样做了,你会得到一个列表,其中包含对同一个列表的多个引用。下面是一个简短的代码示例:
您可以看到列表1中的第一项和第二项实际上是 通过使用内置函数
id
实现相同的对象:改为使用列表:
相关问题 更多 >
编程相关推荐