【发布时间】:2019-12-14 20:50:41
【问题描述】:
python 新手,但对 c# 有一些经验,并尝试创建一个基本脚本来计算一组随机生成的整数的标准差。下面代码中生成的两个直方图是不同的,尽管据我所知它们应该是相同的,因为我从未在生成两个直方图之间修改过变量“收入”。
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
npoints = 10000
incomes = np.random.normal(100.0, 50.0, npoints)
################
plt.hist(incomes, 50)
plt.show()
###############
incomestore = incomes
meanincomes = np.mean(incomes)
for i in range(incomes.size):
incomestore[i] = (incomes[i] - meanincomes)**(2)
standardDeviation = np.sqrt(np.mean(incomestore))
print(standardDeviation)
###############
plt.hist(incomes, 50)
plt.show()
##############
代码生成的两个直方图应该相同时却不同(不是缩放错误)。
【问题讨论】:
-
incomestore = incomes这一行表示它们是同一个对象。基本上,对象就像物理事物,变量(引用)就像写有地址的纸片。所以你有两张不同的纸,一张叫incomestore,另一张叫incomes,但它们的位置都一样。 -
如果要复制,可以使用while slice:
incomestore = incomes[:]Slice 表示法是[start:end](或[start:end:step])。如果您省略一个值,则从末尾开始 - 省略第一个值意味着“从第一个元素获取”,省略最后一个意味着“直到最后”。结果始终是一个副本,因此my_list[:]是复制列表的简写。