2014-03-25 23 views
1

我有一個函數擬合數X,通過以下算法ÿ陣列:跳過RuntimeError內部numpy.apply_along_axis

def f(func, data, init): 
    import scipy.optimize as opt 
    from numpy import apply_along_axis 

    fit = lambda d: opt.curve_fit(func, d[:cut], d[cut:], p0=[init, init], maxfev=100)[0] 

    return apply_along_axis(fit, 1, data) 

所以,我應用擬合數據的每個第一軸(形狀=(50000, 6)),但是,突然間,在某些行中出現問題,停止numpy.apply_along_axis並返回RuntimeError。由於我不在乎錯誤的配合,所以我想跳過它們。

因此,是否可以在apply_along_axis函數內禁用這些RuntimeError?

回答

2

您可以簡單地處理異常並在發生RuntimeError時返回0。

編輯:處理現在處於fit狀態。

def fit(d): 
    try: 
     return opt.curve_fit(func, d[:cut], d[cut:], p0=[init, init], maxfev=100)[0] 
    else: 
     return 0 

但是,我不知道是否返回0是最好的事情。 apply_along_axis期望函數返回一個數組或標量。您需要定義您想要返回的內容。 curve_fit提高時發送運行時錯誤的原因。它應該可以幫助你知道什麼是最好的,甚至可以在第一時間防止異常。您可能需要在此處發佈,以幫助我們瞭解問題所在。

你可以找到關於異常更多的信息處理這裏:https://wiki.python.org/moin/HandlingExceptions

順便說一句,你有最大的化身。

+2

這是一個好主意,但是應該在'fit'函數內完成異常處理,只跳過一些行而不是整個數組。 – 2014-03-25 17:12:38

+0

謝謝@Fury,冒險時間是現今最偉大的動畫系列。是的,moarningsun是正確的,我需要在curve_fit或apply_along_axis中處理異常。我只是想跳過有問題的裝修。 –

+0

我編輯了我的答案以提供一個新的'fit'函數。如前所述,我不知道返回0是否是最好的做法,但是由於'apply_along_axis'期望得到某些東西,所以不能只返回'None'。 – Fury