NumPy数组整数/浮点数除法

18

我发现在Python/NumPy中出现了以下行为,有些奇怪:

In [51]: a = np.arange(10, 20)
In [52]: a = a / 10.0
In [53]: a
Out[53]: array([ 1. ,  1.1,  1.2,  1.3,  1.4,  1.5,  1.6,  1.7,  1.8,  1.9])

In [54]: a = np.arange(10, 20)
In [55]: a /= 10.0
In [56]: a
Out[56]: array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])

我觉得 a=a/10.0a/=10.0 应该返回相同的结果。这是有意为之并且有文件记录吗?

1个回答

22
a /= 10.0 的问题在于它会直接修改数组,并且不会改变数组的数据类型,所以所有浮点数都会被转换为整数。另一方面,a = a / 10.0 创建了一个新的数组,如果创建了一个新的数组,则可以更改其类型。
根据文档,请注意,将高类型(如浮点数)分配给低类型(如整数)可能会导致更改或抛出异常(将复杂数分配给浮点数或整数)。

对于这个很棒的答案点赞。就我个人而言,当我尝试生成双精度浮点数时,我总是使用np.arange(10., 20.)来确保安全。 - Yuxiang Wang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接