使用我当前设置的代码,值似乎翻倍,我无法查明原因。
例如,我通过函数运行数组(E)并得到[5.569, 10.9536, 16.167, ...]
然后当我稍后使用数组(G)再次运行该函数时突然(E) 现在将读取 [11.137, 21.90721, 32.3342, ...]
这些数字似乎是数组最初的数字和应该的数字的两倍。下面是正在使用的功能?出了什么问题??
脚本1:
E = PyFunctions.za(c_v, 4)
F = PyFunctions.za(c_v, 6)
G = PyFunctions.zb(E, F, 2)
脚本2:
def zb(e1, e2, p):
l1 = len(e1)
l2 = len(e2)
if l1 > l2:
e1 = e1[(-1 - l2) + 1:]
elif l2 > l1:
e2 = e2[(-1 - l1) + 1:]
e1p = e1
e1p[:] = [x * p for x in e1p]
e2p = e2
e2p[:] = [x * (p - 1) for x in e2p]
z = [0] * len(e1p)
for k in range(len(e1p)):
z[k] = e1p[k] - e2p[k]
return z
最佳答案
这是 Python aliasing 的效果。因为您将 E
作为 e1
传递给 zb()
,所以 e1
正是 E
,并在您所说的行上:
e1p = e1
您正在 e1
和 e1p
之间建立别名关系,从而在 E
和 e1p
之间建立别名关系。然后,在下一行将 e1p
中的每个元素乘以 p
:
e1p[:] = [x * p for x in e1p]
您实际上是在 E
上执行该操作(由于别名),因此 E
中的每个元素都将乘以 p
> (您以 2 的形式传入),这就是 E
被加倍的原因。
如果您只想将 E
的副本传递到 zb()
中,则可以替换脚本 1 中的第三行与此:
G = PyFunctions.zb(E[:], F, 2)
关于python - 用户定义的函数似乎是过去输入的两倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57650387/