在这个小例子中,两个“ res”变量给出不同的结果。有人可以解释为什么吗?我希望它们都能返回大约5。
import numpy as np
import matplotlib.pyplot as plt
dist1 = np.random.normal(100., 10., 10000)
dist2 = np.random.normal(0.05, 0.005, 10000)
res1 = dist1
res1 *= dist2
res2 = dist1 * dist2
print np.median(res1)
print np.median(res2)
# 4.986893617080765
# 0.24957162692779786
答案 0 :(得分:1)
res1 = dist1
不会不复制dist1
。您正在使用*=
对其进行修改,因此这是两个不同的操作。
使用copy
复制数组:
>>> dist1 = np.random.normal(100., 10., 10000)
>>> dist2 = np.random.normal(0.05, 0.005, 10000)
>>>
>>> res1 = dist1.copy()
>>> res1 *= dist2
>>>
>>> res2 = dist1 * dist2
>>>
>>> print(np.median(res1))
4.970902419879373
>>> print(np.median(res2))
4.970902419879373
只是一个提示:python中的“变量”只是对象的名称(即引用)。它们不代表内存位置。这样做:
res1 = dist1
您只是给名称为dist1
的对象取一个新名称,现在该对象有两个名称(res1
和dist1
),并且两者都可以访问。
当对象是不可变的时,很难看到名称/引用和值之间的区别,但是在处理可变对象时,区别是基本的。