2015-10-14 1 views
0

Par exemple, je contiennent des données:Comment adapter les données avec le point de données manquant dans lmfit minimiser?

x y1 y2 y1 
--------------------- 
1 5  8 - 
2 4  - 4 
3 7  7 10 
4 9  4 12 
5 10 - 20 
6 15 - 21 

où x est l'axe x et y1, y2, y3 sont trois ensembles de données différentes, qui sont montés ensemble.

Par souci de simplicité, la version Heres réduite d'un code d'assemblage:

def gauss_dataset(params, i, x): 
    """calc gaussian from params for data set i 
    using simple, hardwired naming convention""" 
    x = params['x_%i' % (i+1)].value 
    y = params['x_%i' % (i+1)].value 
    return x + y 

def objective(params, x, data): 
    """ calculate total residual for fits to several data sets held 
    in a 2-D array, and modeled by Gaussian functions""" 
    ndata, nx = data.shape 
    resid = 0.0*data[:] 
    # make residual per data set 
    for i in range(ndata): 
     resid[i, :] = data[i, :] - gauss_dataset(params, i, x) 
    # now flatten this to a 1D array, as minimize() needs 
    return resid.flatten() 

x = np.linspace(0, 50, 50) 
data = [] 

... 

# Rearange data 
for col in range(0, data_sets): 
    for row in range (0, size_rows): 
     data[col][row] = intens[row][col+1] 

# create 5 sets of parameters, one per data set 
fit_params = Parameters() 
for iy, y in enumerate(data): 
    fit_params.add('x_%i' % (iy+1)) 
    fit_params.add('y_%i' % (iy+1)) 

# run the global fit to all the data sets 
minimize(objective, fit_params, args=(x, data)) 

dans minimize(objective, fit_params, args=(x, data)): data est donnée [y] [z]: y - ensemble de données, z - données dans cet ensemble de données . et x est l'axe x.

Comment puis-je modifier mon script python lmfit minimiser ignorer les points de données manquantes ou de réécrire mon script, donc chaque donnée a son propre axe x ?:

x1 y1 x2 y2 x3 y3 
----------------------------- 
1 5  1 8 2 4- 
2 4  3 7 3 10 
3 7  4 4 4 12 
4 9    5 20 
5 10    6 21 
6 15 

aussi je ne peux pas utiliser plusieurs minimiser fits (script en fait plus compliqué que montré ci-dessus), donc premier = minimiser (objectif, ajuster_paramètres, args = (x1, y1)), second = minimiser (objectif, ajuster_paramètres, args = (x2, y2)) n'est pas une réponse valide.

Répondre

0

Je ne vois pas comment vous lisez dans vos données, et ne peux donc pas dire comment les valeurs manquantes sont représentées. Si vous utilisez quelque chose comme np.nan pour représenter une valeur manquante, vous pouvez masquer les points du calcul résiduel en utilisant np.isnan et np.where. Cela pourrait arriver avant ou après le résultat.