2014-02-13 67 views
11

我发现在Python/numpy的以下行为有些奇怪: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

facepalm – wim

回答

16

a /= 10.0的问题是它修改了数组,并且它不会改变数组的dtype,所以所有的浮点数都被转换为整数。另一方面,a = a/10.0创建了一个新数组,如果正在创建一个新数组,则可以更改该类型。

docs

注意,分配可产生以下改变,如果分配更高类型 降低类型(如浮标到整数)或甚至异常(分配 复杂到漂浮或整数):

+1

很好的答案。简短而完整。 – Geoff

+0

+1为伟大的答案。就我个人而言,当我尝试生成双浮点数时,我总是使用np.arange(10。,20)来保证安全。 –