【问题标题】:Numpy arrays changing unexpectedlyNumpy 数组意外更改
【发布时间】:2020-01-20 05:57:08
【问题描述】:
SL = np.zeros((N+1))
DDB, SOYD, MACRS, MEX, book_value = SL, SL, SL, SL, SL
print("MEX: ",MEX)
book_value[0] = inv_fci
DDB[0] = 0
print("MEX: ",MEX)
SL[1:m+1] = inv_fci/m
print("MEX: ",MEX)

所以我创建了一个 numpy 数组 SL,它基本上是 (N+1) 个零,然后我将它分配给了一堆其他数组:DDB、SOYD、MACRS 等。 奇怪的是,在我对 SL 做了一些事情之后,所有的数组都完全按照 SL 的变化方式发生了变化。 未触及的 MEX 变得与 SL 完全相同,即具有 m 个条目的数组,全部等于 inv_fci(预定的双精度变量)。 在做了一些测试之后,当我改变 SL 时,甚至其他数组也在改变。

为什么当我更改 SL 时这些数组会发生变化?

【问题讨论】:

  • 因为您只创建了一个数组并将其分配给一堆不同的名称。阅读以下内容:nedbatchelder.com/text/names.html
  • 使用np.array(SL) 构造函数来制作独立的副本。
  • 或者.copy()方法

标签: python arrays numpy


【解决方案1】:
DDB, SOYD, MACRS, MEX, book_value = SL, SL, SL, SL, SL

这使得DDBSOYDMACRSMEXbook_value 指向同一个对象。如果该对象被修改,那么您的所有变量都将指向同一个修改后的对象。

一种可能的解决方案是创建 SL 的副本,并为每个变量分配不同的副本。

【讨论】:

    【解决方案2】:

    我猜是因为您只是分配一个引用而不是复制它。

    你可以试试复制

    https://docs.scipy.org/doc/numpy/reference/generated/numpy.copy.html

    【讨论】:

      猜你喜欢
      • 2022-01-04
      • 1970-01-01
      • 2022-10-05
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 2017-03-04
      • 2019-10-11
      相关资源
      最近更新 更多