【问题标题】:Numpy array matrices do not change values during iteration [duplicate]Numpy数组矩阵在迭代期间不会改变值[重复]
【发布时间】:2017-06-02 21:33:34
【问题描述】:

由于我是 Python 新手,我遇到了以下问题:

我有一个初始 numpy 数组,其中包含用于模拟的变量的初始值。我想根据一些方程式更新这些。假设 x_init 是具有初始值的数组,它是一个 (5,3) 数组,x 是用于在每次迭代期间更新和存储值的数组,我要做的是:

x = x_init
while x.min()<100:
  for j in range(3):
      for i in range(5):
        x[i,j]=x[i,j]+rand1

其中 rand1 只是在 [0,1] 之间产生的随机数。最后,由于开始时的分配(我假设),数组 x 总是等于 x_init 。您能否解释一下为什么会发生这种情况并提出一种在 python 中处理此类分配的方法?

【问题讨论】:

  • 因为x 在分配过程中提到的x_init。赋值 从不 隐式复制。这始终是这样工作的。
  • 您应该阅读并理解 Ned Batchelder 的 Facts and myths about Python names and values。虽然没有提到numpy 数组,但原则仍然适用。
  • 另外,请记住,在 Python my_list_copy = my_list[:] 中使用切片复制序列(如列表)的常见习语实际上并没有使用 numpy 数组创建底层数组的副本,切片是实际上是一个view
  • 感谢您的帮助!你发给我的指南真的很有帮助!

标签: python arrays variable-assignment


【解决方案1】:

你需要复制一份,因为分配只会给你一种新的方式来引用同一个对象。

对于这种特定情况,请像这样使用numpy.copy

import numpy as np

b = np.ones((3,3))
a = np.copy(b)
a[1,1] += 1
print(b)
print(a)

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

【讨论】:

  • 我尝试使用 numpy.copyto(a,b),其中 a 是目标,b 是要复制的数组,但它会产生相同的结果。
  • 我写的是copy而不是copyto,请看我输入的例子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-26
  • 2020-10-25
  • 2019-07-27
  • 2015-03-31
  • 2017-03-04
  • 1970-01-01
相关资源
最近更新 更多