解释一下这个问题:
预期的结果当然是
我猜测这与numpy并行处理数据有关,但它没有足够的智能来先制作临时数据副本(或按正确顺序执行操作)。
换句话说,我怀疑它正在做一些像这样的幼稚事情:
>>> a = np.arange(10)
>>> a[2:]
array([2, 3, 4, 5, 6, 7, 8, 9])
>>> a[:-2]
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> a[2:] - a[:-2]
array([2, 2, 2, 2, 2, 2, 2, 2])
>>> a[2:] -= a[:-2]
>>> a
array([0, 1, 2, 2, 2, 3, 4, 4, 4, 5])
预期的结果当然是
array([0, 1, 2, 2, 2, 2, 2, 2, 2, 2])
。我猜测这与numpy并行处理数据有关,但它没有足够的智能来先制作临时数据副本(或按正确顺序执行操作)。
换句话说,我怀疑它正在做一些像这样的幼稚事情:
for i in range(2, len-2):
a[i] -= a[i-2]
这段代码用于Matlab和Octave:
a = 0:9
a(3:end) = a(3:end) - a(1:end-2)
a =
0 1 2 3 4 5 6 7 8 9
a =
0 1 2 2 2 2 2 2 2 2
如果你执行以下操作,它实际上是有效的:
a[2:] = a[2:] - a[:-2]
所以这意味着对于numpy来说,a -= b
不等同于 a = a - b
!
事实上,现在我想起来了,我认为Mathworks之所以没有实现+=、-=、/=和*=运算符之一就是出于这个原因!
a -= b
和a = a - b
并不相同!在纯Python中也是如此。https://dev59.com/Q3E95IYBdhLWcg3wWMlQ - Akavall