无法在for循环中更新数组元素

时间:2019-02-21 11:48:10

标签: python numpy

我想在函数roll中重新定义数组元素

roll_current = 0

def roll(t):
    global roll_current

    # Generate array of the same numbers
    roll_current_ =  np.full((len(t)), roll_current)

    delta_roll_ = 0.1 - np.exp(-t)
    diff_ = roll_current_ - delta_roll_     

    # Update roll_current_ array
    for i, x in enumerate(roll_current_):
        if diff_[i]>0:
            roll_current_[i] = x - abs(diff_[i]) # x is equal to roll_current_[i] 
        elif diff_[i]<0:
            roll_current_[i] = x + abs(diff_[i]) 

    # Save value for the last time step
    roll_current = roll_current_[-1] # Scalar

    return roll_current_

但是,如果我使用-=+=分配或上面的代码,则roll_current_数组不会改变,并且以下几行

t = np.linspace(0,4,10)
roll(t)

给予array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

怎么了?

2 个答案:

答案 0 :(得分:1)

我在您的代码中发现了问题:

a方法使用值为整数的fill填充数组。因此,该数组也将是roll_current类型。然后,在int循环中,您要设置的所有值都在-1和1之间,并因此四舍五入为零。 要解决此问题,请更改此行

for

对此

roll_current_ =  np.full((len(t)), roll_current)

或者,您可以像这样初始化roll_current_ = np.full((len(t)), roll_current, dtype = np.float)

roll_current

答案 1 :(得分:0)

如果您打印roll_current_ = np.full((len(t)), roll_current) 输出:

[0 0 0 0 0 0 0 0 0 0]

可能您不想要这个。

如果可以避免,请不要使用全局变量,为什么不def roll(t, roll_current)

在for循环中,不要更新您要迭代的同一数组,而是构建附加新项的另一个数组。