Python NUMPY:如何使用嵌套的';对于';循环
所以我想知道如何使用嵌套for循环填充二维Numpy数组。下面是我的代码片段:Python NUMPY:如何使用嵌套的';对于';循环,python,arrays,numpy,loops,nested-loops,Python,Arrays,Numpy,Loops,Nested Loops,所以我想知道如何使用嵌套for循环填充二维Numpy数组。下面是我的代码片段: import numpy as np y=np.ones(6000).reshape(100,60) x=1e-5*np.ones(6000).reshape(100,60) L=60 r=3.9 eps=0.2 def logistic(n,i): y[n,i]=r*x[n,i]*(1-x[n,i]) return y[n,i] for n in range(99): for i in
import numpy as np
y=np.ones(6000).reshape(100,60)
x=1e-5*np.ones(6000).reshape(100,60)
L=60
r=3.9
eps=0.2
def logistic(n,i):
y[n,i]=r*x[n,i]*(1-x[n,i])
return y[n,i]
for n in range(99):
for i in range(L):
x[n+1,i] = (1-eps)*logistic(n,i)
print(x)
这段代码生成一个输出,但我不确定这是否是我应该得到的输出。
这里是输出的快照:
我正在寻找能够生成具有以下算法的输出的东西:
x[n+1,i]
数组中,对于n=1
(即,第1行),在循环中使用i=1,2,3…60
将x
数组的所有列元素填充为(1-eps)*logistic(r,x)
n=2
,在循环中使用i=1,2,3…60
将x
数组的所有列元素填充为(1-eps)*logistic(r,x)
n=99
,然后打印最终数组如果你能想出一个办法,那将是一个很大的帮助。生成输出后,我还想绘制2d数组,这基本上是生成耦合贴图晶格的一种方法。
numpy
似乎不包括通过对起始值累积应用函数来构建数组的方法。您可以使用或来实现这一点
无需进入pandas
,您可以将列构建为标准列表,然后将其乘以二维数组:
x = 1e-5
column = [x]
for _ in range(99):
x = (1 - eps) * r * x * (1-x)
column.append(x)
result = np.array([column] * 60).transpose()
类似地,您可以使用fromiter
创建一个生成器函数并创建列数组:
def cumulator(start, function, length):
x = start
yield x
for _ in range(length-1):
x = function(x)
yield x
column = np.fromiter(cumulator(1e-5, lambda x: (1-eps) * r * x * (1-x), 100),
dtype=float)
result = np.array([column] * 60).transpose()
或者您可以一次构建一行并vstack
(垂直堆叠)它们:
请不要对循环使用
。您可以使用np.arange
获得一个数组,然后尝试使用广播“批量”计算一个矩阵。那么您的行都是一样的吗?请澄清您想要什么输出。看起来您正试图使每一行都是前一行的函数,但不清楚。如果您将n
和i
传递到logistic
,而不是r
,则代码会更清晰。您以后是否还要使用y
?如果不是,为什么logistic
要修改数组而不是简单地返回值?如果所有索引的使用都在一个表达式中可见,则更容易检测模式。例如,我怀疑您不需要迭代I
。因为n+1
依赖于n
,所以要删除这个循环就更难了。@WillemVanOnsem-Geez!我是python的初学者。我不知道你的方法对我想要的结果会起什么作用。因此,如果你能解释一下……@Stuart,x数组的行和列最初是相同的,它们到处都是值1e-5。我要做的是:对于第一行,计算表达式(1-eps)*logistic(n,I)的值,并将该值放入第1行的所有列元素中。然后对第2行、第3行执行相同的操作,依此类推。。。。。最后,打印x数组。是的,你可以说一行是前一行的函数,因为它是耦合数据。
row = np.full(60, 1e-5)
result = row
for _ in range(99):
row = (1 - eps) * r * row * (1 - row)
result = np.vstack((result, row))