【问题标题】:Appending to numpy array within a loop在循环中附加到 numpy 数组
【发布时间】:2020-09-14 16:57:39
【问题描述】:

我真的希望不要错过之前已经澄清过的东西,但我在这里找不到东西。

任务看起来很简单,但我失败了。我想在 for 循环中不断地将一个 numpy 数组附加到另​​一个数组:

step_n = 10
steps = np.empty([step_n,1])

for n in range(step_n):
    step = np.random.choice([-1, 0, 1], size=(1,2))
    #steps.append(step) -> if would be lists, I would do it like that
    a = np.append(steps,step)
    #something will be checked after each n

print(a)

输出应该是 <class 'numpy.ndarray'> 类型的 ofc 并且看起来像:

[[-1.  0.]
 [ 0.  0.]
 [-1. -1.]
 [ 1. -1.]
 [ 1.  1.]
 [ 0. -1.]
 [-1.  1.]
 [-1.  0.]
 [ 0. -1.]
 [ 1.  1.]]

但是,由于某些(很可能是显而易见的)原因,代码失败了。 谁能给我一个提示?

【问题讨论】:

    标签: python-3.x numpy-ndarray


    【解决方案1】:
    import numpy as np
    
    step_n = 10
    steps = np.random.choice([-1, 0, 1], size=(1,2))
    for n in range(step_n-1):
        step = np.random.choice([-1, 0, 1], size=(1,2))
        print(steps)
        steps = np.append(steps, step, axis=0)
        #something will be checked after each n
    
    print(steps)
    

    其中一个问题是您的 steps 变量在 for 循环 has a different size 之外初始化,而不是内部的每个步骤。通过在 for 循环之外创建第一步,我更改了您初始化变量 steps 的方式。这样,您的 steps 变量已经具有匹配的大小。但请注意,您需要因此减少 for 循环中的 1 次迭代。

    另外,您希望在每个 for 循环中更新 steps 变量,而不是在其中创建新变量“a”。在您的代码中,您只会得到 steps 数组(永远不会改变)并且只有最后一步。

    【讨论】:

    • 非常感谢!至少在里面创建“a”是愚蠢的。
    • @F. Trenk,在for循环中生成数据时我该怎么做?例如 a = np.empty() for-loop a=np.append(a, b)
    猜你喜欢
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 2017-03-23
    • 2021-04-17
    • 2022-01-25
    相关资源
    最近更新 更多