2011-03-18 246 views
11

所以我的數值程序有問題,我很好奇它是否是精度問題(即舍入誤差)。有沒有一種快速的方法可以將我的程序中的所有浮點數組更改爲float128數組,而無需通過我的代碼並在整個地方輸入dtype ='float128'。我的數組都是float64,但我從來沒有明確寫過dtype ='float64',所以我希望有一種方法來改變這種默認行爲。我可以設置float128作爲numpy中的標準浮點數組

+0

有一個'numpy.float_'恆定的設定爲'float64',但它改變到'numpy.float128'和詢問'numpy.array([1.1])。dtype'保持返回'float64'。 – eumiro 2011-03-18 10:08:14

+0

對float128的支持很粗略,irc它不適用於windows。嘗試與float96相同。 – tillsten 2011-03-18 10:47:22

+0

我正在使用Linux(Ubuntu)系統。那裏的支持如何?它不會在Windows上工作的事實並不重要,因爲它只是檢查自己。 – Eskil 2011-03-18 10:53:29

回答

15

我不認爲有一箇中央「配置」,你可以改變,以實現這一目標。有些選項你可以做什麼:

  1. 如果要創建只有極少數的NumPy的工廠功能陣列,通過自己的版本替換這些功能。如果您導入這些功能,如

    from numpy import empty 
    

    你可以做

    from numpy import float128, empty as _empty 
    def empty(*args, **kwargs): 
        kwargs.update(dtype=float128) 
        _empty(*args, **kwargs) 
    

    如果你正在做

    import numpy 
    

    你可以寫一個模塊mynumpy.py

    和進口它像

    import mynumpy as numpy 
    
  2. 重構代碼總是使用dtype=myfloat。這將使這種變化在未來變得容易。您可以將此方法與numpy.empty_like(),numpy.zeros_like()numpy.ones_like()的使用結合使用,儘可能將硬編碼的實際數據類型放置在儘可能少的地方。

  3. 子類numpy.ndarray並且只使用您的自定義構造函數來創建新數組。

+0

按順序嘗試這些可能是最好的:1-2-3。最後一個選項(sub-classing'numpy.ndarray')很優雅,但也有缺陷。例如,我意外地通過將數組的切片存儲爲屬性來破壞數組垃圾收集,即'self.myslice = self [0,:]'。隨着我做越來越多的操作,我的RAM會慢慢充滿。 – 2016-07-27 14:53:44