【问题标题】:Numpy: Output from adding sub-array to itselfNumpy:将子数组添加到自身的输出
【发布时间】:2019-01-16 20:03:46
【问题描述】:

想知道这个 numpy 输出背后的逻辑是什么。基本上,我正在尝试通过使用以下代码切片来将 numpy 数组的子集添加到自身。

x = np.zeros((10,))
x[:3] += 1
print x
x[2:] += x[:-2]
print x

原x:

[ 1.  1.  1.  0.  0.  0.  0.  0.  0.  0.]

预期输出:

[ 1.  1.  2.  1.  1.  0.  0.  0.  0.  0.]

但是它返回了以下结果,这是完全出乎意料的。有人知道这里的逻辑是什么吗?

实际输出:

[ 1.  1.  2.  1.  2.  1.  2.  1.  2.  1.]

编辑:问题似乎特定于 numpy 1.11.3。在 numpy 1.15.4 的环境中再次尝试,它返回了预期的输出。

【问题讨论】:

  • 具有自身视图的数组的赋值数学运算符可能无法按预期工作。查看可能重复的 Unexpected result with += on NumPy arraysx[2:] = x[2:] + x[:-2]x[2:] += x[:-2].copy() 应该可以可靠地工作)。

标签: python numpy


【解决方案1】:

使用您的代码,我得到了预期的输出:

x = np.zeros((10,))

x[:3] += 1

x
array([1., 1., 1., 0., 0., 0., 0., 0., 0., 0.])

x[2:] += x[:-2]

x
array([1., 1., 2., 1., 1., 0., 0., 0., 0., 0.])

【讨论】:

  • 我怀疑它特定于 numpy 版本 1.11.3。即使重新启动内核后,我也会遇到同样的问题。但是,当我使用更高版本的 numpy 在另一个环境中运行完全相同的代码时,我得到了预期的输出。
猜你喜欢
  • 2021-01-24
  • 1970-01-01
  • 2011-04-22
  • 2011-02-10
  • 2017-12-09
  • 2014-03-05
  • 2017-12-27
  • 2012-08-26
  • 1970-01-01
相关资源
最近更新 更多