gpt4 book ai didi

python - Numpy - 加号等于切片的奇怪行为

转载 作者:太空狗 更新时间:2023-10-30 00:11:20 27 4
gpt4 key购买 nike

Plus equal 在涉及切片时给出与分配给显式总和(这是人们期望的答案)不同的答案。是否有一个原因?应该避免加等于吗?

a = np.arange(10)
b = np.arange(10)
a[3:] += a[:-3]
b[3:] = b[3:] + b[:-3]
print a
#[ 0 1 2 3 5 7 9 12 15 18]
print b
#[ 0 1 2 3 5 7 9 11 13 15]

最佳答案

正如 JBernardo 评论的那样,+= 就地更改数组。

a[3:] += [a:-3] 类似于以下内容:

>>> import numpy as np
>>> a = np.arange(10)
>>>
>>> for i in range(3, 10):
... print('a[{}] ({}) += a[{}] ({})'.format(i, a[i], i-3, a[i-3]))
... a[i] += a[i-3]
... print(' a[{}] -> {}'.format(i, a[i]))
...
a[3] (3) += a[0] (0)
a[3] -> 3
a[4] (4) += a[1] (1)
a[4] -> 5
a[5] (5) += a[2] (2)
a[5] -> 7
a[6] (6) += a[3] (3)
a[6] -> 9
a[7] (7) += a[4] (5) # NOTE: not (4)
a[7] -> 12
a[8] (8) += a[5] (7)
a[8] -> 15
a[9] (9) += a[6] (9)
a[9] -> 18

为避免这种情况,请使用数组的副本:

>>> a = np.arange(10)
>>> a[3:] += np.copy(a[:-3]) # OR np.array(a[:-3])
>>> a
array([ 0, 1, 2, 3, 5, 7, 9, 11, 13, 15])

关于python - Numpy - 加号等于切片的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19417649/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com