【问题标题】:Python: Array is being modified and I don't understand why [duplicate]Python:数组正在修改,我不明白为什么[重复]
【发布时间】: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[:] 是复制列表的简写。

标签: python arrays numpy


【解决方案1】:

incomestore 和 incomes 指的是同一个数组。你必须复制一份

incomestore = incomes.copy()

但最好使用 numpy 的向量能力:

incomestore = (incomes - incomes.mean()) ** 2
standardDeviation = incomestore.mean() ** 0.5

【讨论】:

  • 谢谢,问题解决了。
  • 你也可以写成incomestore = np.copy(incomes),作为一个偏好。
猜你喜欢
  • 1970-01-01
  • 2021-10-20
  • 2021-11-18
  • 2022-01-23
  • 2019-05-16
  • 2018-05-22
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
相关资源
最近更新 更多