首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python中a -= b和a=a-b的区别

Python中a -= b和a=a-b的区别
EN

Stack Overflow用户
提问于 2016-01-27 19:29:44
回答 1查看 7.7K关注 0票数 90

我最近应用了this解决方案来平均每N行矩阵。尽管解决方案在一般情况下有效,但在应用于7x1数组时,我遇到了问题。我注意到问题出在使用-=运算符的时候。举个小例子:

代码语言:javascript
复制
import numpy as np

a = np.array([1,2,3])
b = np.copy(a)

a[1:] -= a[:-1]
b[1:] = b[1:] - b[:-1]

print a
print b

以下哪项输出:

代码语言:javascript
复制
[1 1 2]
[1 1 1]

因此,在数组的情况下,a -= b会产生与a = a - b不同的结果。直到现在,我一直认为这两种方式是完全相同的。有什么关系?

为什么我提到的矩阵中每N行求和的方法对7x4矩阵有效,但对7x1数组无效?

EN

回答 1

Stack Overflow用户

发布于 2016-01-27 19:37:15

在内部,区别在于:

代码语言:javascript
复制
a[1:] -= a[:-1]

等同于:

代码语言:javascript
复制
a[1:] = a[1:].__isub__(a[:-1])
a.__setitem__(slice(1, None, None), a.__getitem__(slice(1, None, None)).__isub__(a.__getitem__(slice(1, None, None)))

而这一点:

代码语言:javascript
复制
b[1:] = b[1:] - b[:-1]

映射到以下内容:

代码语言:javascript
复制
b[1:] = b[1:].__sub__(b[:-1])
b.__setitem__(slice(1, None, None), b.__getitem__(slice(1, None, None)).__sub__(b.__getitem__(slice(1, None, None)))

在某些情况下,__sub__()__isub__()的工作方式类似。但是在使用__isub__()时,可变对象应该发生变化并返回自身,而使用__sub__()时,它们应该返回一个新对象。

对numpy对象应用切片操作会在它们上创建视图,因此使用它们可以直接访问“原始”对象的内存。

票数 43
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35036126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档