2014-02-13 69 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)來保證安全。 –