Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python NUMPY:如何使用嵌套的';对于';循环_Python_Arrays_Numpy_Loops_Nested Loops - Fatal编程技术网

Python 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

所以我想知道如何使用嵌套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 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))