【发布时间】:2017-08-02 14:49:46
【问题描述】:
我在下面的代码中有一个变量的奇怪行为。
为什么最后w3的输出和w2一样?代码里从来没改过,最后还是和w2一样的值?
import numpy as np
inpt = np.array([[1]])
w1 = np.random.random((1,1))
w2 = np.random.random((1,1))
w3 = w2
print("First w3: ", w3)
n1 = np.dot(inpt, w1)
n2 = np.dot(n1, w2)
delta = 1 - n2
n1_d = np.dot(delta, w2.T)
w2 += np.dot(n1.T, delta)
w1 += np.dot(inpt.T, n1_d)
print("Second w3: ", w3)
print("Value of w2: ", w2)
第一个 w3:[[ 0.98377014]]
第二个 w3:[[ 1.01105407]]
w2 的值:[[ 1.01105407]]
我在这里做错了什么?
【问题讨论】:
-
不是 python 专家,所以我可能错了。是因为 w3 只是对 w2 的引用吗?所以当你改变 w3 时,w2 引用的 w3 的新值。它在此行之后更改
w2 += np.dot(n1.T, delta) -
使用
w3 = np.copy(w2) -
您似乎不清楚 Python 变量和赋值是如何工作的。这是handy guide。
-
这篇文章可能对您有所帮助:Facts and myths about Python names and values,由 SO 资深人士 Ned Batchelder 撰写。
-
还有一些很好的相关信息here。这个问题是关于普通 Python 列表的,但大部分信息适用于 Python 中的任何可变对象。