更新函数(python)中的变量不起作用?

时间:2015-12-12 22:59:47

标签: python

我仍然是python中的新手并且对学习它感到兴奋。这一次,我有一个功能,我期望更新变量并再次使用而不使用for循环。请看下面我的功能:

def x_func(y):
    x = 0.
    newx = 0.897*x + (y/3)
    x = newx
    return x

示例:

import numpy as np
y = np.array([1, 2, 3])

当我调用我的函数时,我得到:

In [1]:x_func(y)
Out[1]: array([ 0.33333333,  0.66666667,  1.        ])

但是,预期的结果是:

Out[1]: array([ 0.33333333,  0.96563676,  1.8661761797])

我想基于newx 更新x ,并在函数中再次使用它作为新的输入变量x。

有人可以告诉我我做错了吗?

2 个答案:

答案 0 :(得分:1)

您实际收到的结果是正确的。让我们来完成它:

x = 0.
y = np.array([1, 2, 3])
newx = 0.897*x + (y/3)   # newx=([1/3, 2/3, 3/3])
x = newx                 # x = ([1/3, 2/3, 3/3])

...从((0.897 * 0)+(y / 3))==(y / 3),返回值与预期一致。

为什么你会期待任何不同的东西?

答案 1 :(得分:0)

实际上,理由很简单。让我解释一下。

定义一个函数x_func,它将一个numpy向量作为输入,并输出一个修改过的向量。现在,您定义x = 0.(因此,值为零的浮点数)。

然后,x的新值是

0.897 * x  # this is zero
    + y / 3

由于乘法默认为零,我们只需要计算y / 3。在矩阵代数中,标量和向量(numpy数组)的乘法如下:

y / 3 = [1,2,3] * (1/3) = [1/3, 2/3, 3/3] = [0.33333333, 0.66666667, 1.]

这正是您所看到的结果!

您的代码中的问题可能是作业x = 0.您希望用它实现什么?你的解释不足以让我为你的问题提供解决方案,即使我可以指出你出错的地方。