为什么两种numpy数组乘法方法给出不同的答案?

时间:2019-01-31 17:44:05

标签: python numpy

在这个小例子中,两个“ 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

1 个答案:

答案 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的对象取一个新名称,现在该对象有两个名称(res1dist1),并且两者都可以访问。

当对象是不可变的时,很难看到名称/引用和值之间的区别,但是在处理可变对象时,区别是基本的。