我仍然是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。
有人可以告诉我我做错了吗?
答案 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.
您希望用它实现什么?你的解释不足以让我为你的问题提供解决方案,即使我可以指出你出错的地方。