2012-04-11 23 views
2

如果我比較類型float64,其中一人是空的兩個ndarrays,我得到布爾的一個空數組:ndarray比較

x = np.array([1.0,2.1]) #dtype is float64 
y = np.array([])  #dtype is float64 

x==y返回與D型的bool空ndarray。

但是,如果我比較int32類型,其中一人是空的兩個ndarrays,我得到錯誤:

a = np.array([1,2]) 
b = np.array([], dtype='int32') 

a==b個返回False

是怎麼回事?爲什麼返回的類型不同?我試圖做的是比較float64類型的兩個ndarrays。

這正在對蟒蛇2.6.4,1.6.1 numpy的,Windows XP中做

編輯: 「試圖做的是比較類型 'float5' 兩個ndarrays」 - >「,試圖比較兩個ndarrays鍵入'float64'「。

+3

我不能在python/numpy/platform的任何組合上重現浮點情況我已經試過了,包括MacOS 10.6/python 2.5/numpy 1.3,Linux 64位/ python 2.6/numpy 1.4和Windows 7 32bit/python 2.7/numpy 1.6.1。 – talonmies 2012-04-11 06:56:45

+2

@talonmies:同樣的事情在這裏:都如預期的那樣返回False(Mac OS X 10.7,Mac Port的NumPy 1.6.1 for Python 2.7.2)。 – EOL 2012-04-11 06:59:19

+2

@MartinisGroup:你的意思是「兩個'''float64'類型的ndarrays」嗎? – EOL 2012-04-11 07:00:38

回答

1

所以首先,

a = np.array([1,2]) 
b = np.array([], dtype='int32') 

a將不一定是一個Int32陣列;它將取決於您的機器的本機整數類型。我無法解釋你的空布爾數組行爲,因爲我無法重現它。

現在,你是什麼意思「比較float64類型的兩個ndarrays」?比較他們看看他們是否是相同的形狀,如果每個元素是相同的?由於幾個原因,使用==這是一個糟糕的主意。

首先,兩個形狀相同的結果不會是布爾值,而是布爾值數組。至少你會想在結果數組上調用np.all()。另外,如果一個或另一個數組是一些浮點計算的結果,由於浮點舍入錯誤,它們可能實際上相等但不完全相等。 np.allclose(a1, a2)函數是爲這種情況設計的(您可以指定關鍵字參數來更改容差級別);如果兩個陣列具有不同的形狀,它也會優雅地返回False