为什么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


HUX布斯
浏览 165回答 1
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)并且两者都可以访问。当对象是不可变的时,名称/引用和值之间的区别很难看出,但在处理可变对象时区别是根本的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python