2015-12-08 67 views
1

我用下面的代碼掙扎:NumPy的錯誤矢量化轉換輸出爲整數

import numpy as np 

e = np.linspace(0, 4, 10) 

def g(x): 
    if x > 1: 
     return x 
    else: 
     return 0 

vg = np.vectorize(g) 

print(vg(e)) 

的結果是這樣的:

[0 0 0 1 1 2 2 3 3 4] 

我也查了D型。似乎vectorize函數將float64中的類型轉換爲int64!

+0

當我將0更改爲0.0時,問題就解決了,我得到了float64。 vectorize將輸出更改爲int64函數是否正確? – amiragha

回答

5

的文檔np.vectorize說明:

vectorized的輸出的數據類型是通過調用 與輸入的第一個元素的函數來確定。通過指定otypes參數可以避免 。

您輸入的第一個元素是0.0,它返回整數0,使盡可能numpy知道,你想要一個整數D型。正如你發現的那樣,如果你將它改爲0.0,所以你不會改變返回類型,它會表現出來。另外,您可以指定otypes

>>> vg = np.vectorize(g) 
>>> vg(e) 
array([0, 0, 0, 1, 1, 2, 2, 3, 3, 4]) 
>>> vg = np.vectorize(g, otypes=[np.float64]) 
>>> vg(e) 
array([ 0.  , 0.  , 0.  , 1.33333333, 1.77777778, 
     2.22222222, 2.66666667, 3.11111111, 3.55555556, 4.  ]) 
0

@amiragha

Python是看你的輸入變量的整數爲好,所以如果你想保留一切float64你需要指定所有必要的「數字」爲彩車。