python - 在 python 中 a/= 2.0 和 a = a/2.0 的结果是不一样的

标签 python numpy

In [67]: import numpy as np
In [68]: a = np.arange(10)
In [69]: b = a.copy()
In [70]: a /= 2.0
In [71]: a
Out[71]: array([0, 0, 1, 1, 2, 2, 3, 3, 4, 4])
In [72]: b = b / 2.0
In [73]: 
In [73]: b
Out[73]: array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5])

我不知道为什么在尝试处理 numpy 数组时结果不同。

最佳答案

a = np.arange(10) 有一个整数数据类型。

>>> np.arange(10).dtype
dtype('int64')

就地修改数组——例如,使用a/= 2.0——不会改变 数据类型。所以结果包含整数。

相比之下,a/2.0 "upcasts" the resultant array float ,因为除数是 一个 float 。


如果您从一个 float 据类型的数组开始,那么这两个操作会产生相同的结果:

In [12]: a = np.arange(10, dtype='float')

In [13]: b = a.copy()

In [14]: a /= 2.0

In [15]: a
Out[15]: array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5])

In [16]: b = b / 2.0

In [17]: b
Out[17]: array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5])

关于python - 在 python 中 a/= 2.0 和 a = a/2.0 的结果是不一样的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31481031/

相关文章:

python - 如何从Python函数中增加全局变量

python - PyQt:在创建小部件时给 parent ?

python - numpy 数组迭代以跟踪到目前为止的最大数量

python - 箱内累积逻辑或

python - 在python中将unicode json转换为普通json

python - 如何使用glob.glob合并txt文件并添加字符串来分解txt?

python - 使用 beautifulsoup 提取嵌套项目

python - 用Python计算自相关函数

python - 总结特定(多个)范围的数据

python - 使用 Numpy 进行外减法