2013-08-28 11 views
5

Sto rispolvendo un po 'di codice che ho scritto alcuni mesi fa, e per qualche motivo non funziona più ... In poche parole , Sto usando gli oggetti scipy.interpolate.LinearNDInterpolator per interpolare i modelli e confrontarli con i dati. Ora, quando tento di chiamare l'oggetto di interpolazione con le coordinate in cui vorrei l'interpolazione, ottengo il seguente errore:scipy.interpolate.interpnd lamentarsi dell'oggetto 'Delaunay' non ha attributo 'simplices'

In [9]: a([[3500, 3.5, 1.5]]) 
AttributeError       Traceback (most recent call last) 
<ipython-input-9-91f2103e7a0c> in <module>() 
----> 1 a([[3500, 3.5, 1.5]]) 

/usr/lib64/python2.7/site-packages/scipy/interpolate/interpnd.so in  scipy.interpolate.interpnd.NDInterpolatorBase.__call__ (scipy/interpolate/interpnd.c:3133)() 

/usr/lib64/python2.7/site-packages/scipy/interpolate/interpnd.so in  scipy.interpolate.interpnd.LinearNDInterpolator._evaluate_double (scipy/interpolate/interpnd.c:3954)() 

/usr/lib64/python2.7/site-packages/scipy/interpolate/interpnd.so in scipy.interpolate.interpnd.LinearNDInterpolator._do_evaluate (scipy/interpolate/interpnd.c:4684)() 

AttributeError: 'Delaunay' object has no attribute 'simplices' 

Non ho mai visto questo errore prima, e il codice ha funzionato in precedenza. Qualcosa è appena cambiato in scipy di cui non sono a conoscenza?

Grazie per la ricerca!

+0

Puoi creare un esempio semplice e autonomo che mostri il problema? Quale versione di Scipy stavi usando prima, e cosa stai usando adesso? –

risposta

3

Credo che si utilizza una versione precedente della libreria:

La biblioteca Delaunay ha due funzioni di accesso diversi per simplessi: "Delaunay.simplices" e "Delaunay.vertices" mostrato qui (più nuovi docs): http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.Delaunay.html

Dei due Delaunay.vertices è contrassegnato come "deprecato".

Su Ubuntu 13.04 la chiamata simplessi non esiste tuttavia, perché utilizza ancora SciPy 0.11.0: http://docs.scipy.org/doc/scipy-0.11.0/reference/generated/scipy.spatial.Delaunay.html#scipy.spatial.Delaunay

prova con questo esempio minimo o semplicemente riscrivere la simplessi chiamata a vertici:

from __future__ import print_function 

import numpy as np 
from scipy.spatial import Delaunay 
import sys 

my_molecule = np.random.rand(400,3) #points for query 
points = np.random.rand(1000, 3) #points used for Triangulation 

diag = Delaunay(points) 
simplices = diag.find_simplex(my_molecule) 

for point,simplex in zip(my_molecule,simplices): 
    if simplex == -1: 
     print ("Point not included in diag.") 
     continue 
    print ("Doing vertices call: ") 
    spoints = diag.vertices[simplex] 
    print ("Doing simplices call: ") 
    spoints = diag.simplices[simplex]