在numpy.apply_along_axis中跳过RuntimeError

时间:2014-03-25 15:37:18

标签: python numpy error-handling

我有一个函数通过以下算法拟合几个x,y数组:

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)

因此,我将拟合应用于每个第一轴数据(shape =(50000,6)),然而,突然之间,在某些行中存在问题,使numpy.apply_along_axis停止并返回RuntimeError。由于我不在乎错误适合,我想跳过它们。

因此,是否可以在apply_along_axis函数中禁用那些RuntimeError?

1 个答案:

答案 0 :(得分: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

顺便说一下,你拥有最好的化身。