我想在函数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])
怎么了?
答案 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循环中,不要更新您要迭代的同一数组,而是构建附加新项的另一个数组。