2010-06-01 44 views
2

有沒有辦法使Python浮點數遵循關於+/- Inf和NaN的numpy規則?例如,製作1.0/0.0 = Inf在Python中將浮點行爲更改爲Numpy樣式

>>> from numpy import * 
>>> ones(1)/0 
array([ Inf]) 
>>> 1.0/0.0 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ZeroDivisionError: float division 

numpy的的分頻功能divide(1.0,0.0)=Inf但目前尚不清楚它是否可以採用類似於from __future__ import division

回答

1

你應該看看Sage是怎麼做到的。 IIRC他們將Python REPL包裝在他們自己的預處理器中。

1

我試圖做類似的事情,我從來沒有想過如何很好地做到這一點。但是,我可以告訴你一些事情我試過了,沒有工作:

  1. 設置浮= numpy.float - 蟒蛇仍使用舊的浮動
  2. 試圖改變浮動。 div添加到用戶定義的函數 - 「TypeError:無法設置內置/擴展類型float的屬性」。另外,python不喜歡你在內置對象中使用dict對象。

我決定進入並改變實際的cpython源代碼,讓它做我想做的事情,這顯然是不實際的,但它的工作。

我認爲爲什麼類似這樣的事情是不可能的,因爲float/int/list在C中被實現在後臺,並且它們的行爲不能從語言內部乾淨地改變。

0

你可以把所有的漂浮物都包裹在numpy.float64,這是浮點型浮點型。

a = float64(1.) 
a/0 # Inf 

事實上,你只需要在算術運算的左邊包上浮點數,顯然。

+0

我想提供numpy像REPL外殼中的浮點運算,所以顯式包裝不是一個選項。 – Tristan 2010-06-01 18:47:39

相關問題