def f(x):
x=x/5.
return x
def g(x):
x/=5.
return x
x_var = np.arange(5,dtype=np.double)
f(x_var)
print x_var
g(x_var)
print x_var
Output:
[ 0. 1. 2. 3. 4.]
[ 0. 0.2 0.4 0.6 0.8]
这种行为有点奇怪,我一直认为x/= 5。相当于x = x/5。 。但显然,g(x)函数不会在/ =操作中创建新的引用。任何人都可以为此提供解释吗?numpy自我分裂的意外行为
感谢您的解释,我找不到可能导致我期待此行为的文档。 – bluecat 2013-04-09 16:44:07
这不是一个numpy问题,它是一个通过引用对象传递的问题。所有'__i * __'的默认实现都是在可能的情况下进行操作,请阅读[docs](http://docs.python.org/reference/datamodel.html#object.__iadd__)。将一个Python列表传递给一个函数def f(a):a * = 3;返回a',它会修改您调用它的原始对象,而不是简单地返回修改后的副本。 – Jaime 2013-04-09 16:52:00
谢谢,这是我正在寻找的文档参考。所以如果可能的话,它应该在原地进行操作。如果__i * __不可用,它将默认为正常的__ * __操作。 – bluecat 2013-04-09 17:03:15