2013-08-28 5 views
5

Ich habe ein paar Code, den ich vor ein paar Monaten schrieb, und aus irgendeinem Grund funktioniert es nicht mehr ... Auf den Punkt gebracht , Verwende ich scipy.interpolate.LinearNDInterpolator Objekte, um Modelle zu interpolieren und mit Daten zu vergleichen. Nun, wenn ich das Interpolator Objekt mit den Koordinaten zu nennen versuchen, an den ich die Interpolation möchte, bekomme ich folgende Fehlermeldung:scipy.interpolate.interpnd beschwert sich über 'Delaunay' Objekt hat keine Eigenschaft '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' 

Ich habe diesen Fehler noch nie gesehen, und der Code vorher gearbeitet. Hat sich gerade etwas in Scipy geändert, das mir nicht bewusst ist?

Danke fürs schauen!

+0

Können Sie ein einfaches, in sich geschlossenes Beispiel erstellen, das das Problem veranschaulicht? Welche Version von Scipy hast du vorher benutzt und was nimmst du jetzt? –

Antwort

3

Ich denke, Sie verwenden eine ältere Version der Bibliothek:

Die Delaunay-Bibliothek verfügt über zwei verschiedene Zugriffsmethoden für simplices: "Delaunay.simplices" und "Delaunay.vertices" hier gezeigt (neueste docs): http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.Delaunay.html

Von den beiden Delaunay.vertices ist markiert "veraltet".

auf Ubuntu 13.04 der simplices Anruf jedoch nicht existiert, weil es immer noch scipy 0.11.0 verwendet: http://docs.scipy.org/doc/scipy-0.11.0/reference/generated/scipy.spatial.Delaunay.html#scipy.spatial.Delaunay

Versuchen mit diesem minimalen Beispiel oder neu schreiben Sie einfach Ihre simplices zu Eckpunkten nennen:

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]