在这个小例子中,两个“res”变量给出了不同的结果。有人可以解释为什么会这样吗?我希望他们都返回大约 5。import numpy as npimport matplotlib.pyplot as pltdist1 = np.random.normal(100., 10., 10000)dist2 = np.random.normal(0.05, 0.005, 10000)res1 = dist1res1 *= dist2res2 = dist1 * dist2print np.median(res1)print np.median(res2)# 4.986893617080765# 0.24957162692779786
1 回答

互换的青春
TA贡献1797条经验 获得超6个赞
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)并且两者都可以访问。
当对象是不可变的时,名称/引用和值之间的区别很难看出,但在处理可变对象时区别是根本的。
添加回答
举报
0/150
提交
取消