gpt4 book ai didi

python - 为什么 Numpy 对待 a+=b 和 a=a+b 的方式不同

转载 作者:IT老高 更新时间:2023-10-28 22:24:47 25 4
gpt4 key购买 nike

以下 numpy 行为是故意的还是错误?

from numpy import *

a = arange(5)
a = a+2.3
print 'a = ', a
# Output: a = 2.3, 3.3, 4.3, 5.3, 6.3

a = arange(5)
a += 2.3
print 'a = ', a
# Output: a = 2, 3, 4, 5, 6

Python 版本:2.7.2,Numpy 版本:1.6.1

最佳答案

这是故意的。

+= 运算符保留数组的类型。换句话说,整数数组仍然是整数数组。

这使 NumPy 能够使用现有的数组存储执行 += 操作。另一方面,a=a+b 为 sum 创建一个全新的数组,并重新绑定(bind) a 以指向这个新数组;这会增加用于操作的存储量。

引用 documentation :

Warning: In place operations will perform the calculation using the precision decided by the data type of the two operands, but will silently downcast the result (if necessary) so it can fit back into the array. Therefore, for mixed precision calculations, A {op}= B can be different than A = A {op} B. For example, suppose a = ones((3,3)). Then, a += 3j is different than a = a + 3j: while they both perform the same computation, a += 3 casts the result to fit back in a, whereas a = a + 3j re-binds the name a to the result.

最后,如果您想知道为什么 a 首先是一个整数数组,请考虑以下几点:

In [3]: np.arange(5).dtype
Out[3]: dtype('int64')

In [4]: np.arange(5.0).dtype
Out[4]: dtype('float64')

关于python - 为什么 Numpy 对待 a+=b 和 a=a+b 的方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10739978/

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