matplotlib griddata keyerror

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Heini
User
Beiträge: 21
Registriert: Donnerstag 12. April 2007, 10:48

Hallo,

beim Benutzen der griddata-funktion aus matplotlib.mlab taucht bei mir (manchmal - dumm ist, dass ich mir nicht wirklich darüber im Klaren bin unter welchen Umständen der Fehler auftaucht) ein KeyError auf.

Ein Stück Code zu posten macht wenig Sinn, weil es sich tatsächlich nur um den "Standard-Code" für griddata handelt. Daher bin ich mir sicher, dass es irgendetwas mit der x-y-Menge der Punkte zu tun hat.

Code: Alles auswählen

        req = real(np.ravel(q2))[7500:10000]
        imq = imag(np.ravel(q2))[7500:10000]

        reA = real(np.ravel(A_int))[7500:10000]
        x = req
        y = imq
        z = reA

        # define grid.
        xi = np.linspace(-.5,25.0,100)
        yi = np.linspace(-1.,1.,50)
        # grid the data.
        zi = griddata(x,y,z,xi,yi)

q2 und A_int sind 2 auf umständliche Weise erzeugte komplexe 2D-Arrays. Das witzige ist, dass der Fehler nicht auftaucht, wenn ich den slice oben auf [8000:10000] setze. Ich konnte aber an den entsprechenden Mengen keinen substantiellen Unterschied ausmachen - also zumindest ist mir nichts aufgefallen.

Der Fehler sieht dann so aus:


File "D:\Arbeit\Python\BSE for mesons\_BSEv3\_BSEv3.py", line 2077, in
bse_matrix = sBSE_matrix_class(q1, q2, BSE_par)
File "D:\Arbeit\Python\BSE for mesons\_BSEv3\_BSEv3.py", line 262, in __init__
self.DSE_contour(q1)
File "D:\Arbeit\Python\BSE for mesons\_BSEv3\_BSEv3.py", line 1155, in DSE_contour
A_pa_up, B_pa_up = self.DSE( quark.z_pa(quark.t_pa_up), quark)
File "D:\Arbeit\Python\BSE for mesons\_BSEv3\_BSEv3.py", line 902, in DSE
zi = griddata(x,y,z,xi,yi)
File "C:\progra~1\Python25\lib\site-packages\matplotlib\mlab.py", line 2941, in griddata
tri = delaunay.Triangulation(x,y)
File "C:\progra~1\Python25\lib\site-packages\matplotlib\delaunay\triangulate.py", line 88, in __init__
self.hull = self._compute_convex_hull()
File "C:\progra~1\Python25\lib\site-packages\matplotlib\delaunay\triangulate.py", line 128, in _compute_convex_hull
hull.append(edges.pop(hull[-1]))
KeyError: 1743


Nun: 'edges' hat also gar keinen key 'hull[-1]'
woran das aber liegen soll habe ich nicht verstanden.


Hat irgendjemand eine Idee?
Heini
User
Beiträge: 21
Registriert: Donnerstag 12. April 2007, 10:48

Hier doch noch mal ein "funktionierendes" Beispiel, was nicht funktioniert:

Code: Alles auswählen

from scipy.special.orthogonal import p_roots
from scipy import sqrt, cos, pi, sin, real, imag
import numpy as np
import numpy
from numpy import newaxis as na
from matplotlib.mlab import griddata

def c_roots(m):
    """ x_i (coordinates), w_i (weights) to given Chebyshev order as
        arrays.
    """
    ind = numpy.arange(m)+1
    return cos(ind*pi/(m+1))[::-1], (pi/(m+1)*(sin(ind*pi/(m+1)))**2)[::-1]

eps=0
M_max=0.2
n=0.5
q_UV=4.0
t_max = 2*n*M_max*sqrt(q_UV**2+n**2*M_max**2)
x_g_pa, w_g_pa = p_roots(32)

z_pa = lambda t: t**2/(4*n**2*M_max**2) - n**2*M_max**2 + 1j*t#parabolic contour
t_pa_up = (t_max-eps)/2.0 * x_g_pa + (t_max+eps)/2.0#upper parabola
k2 = z_pa(t_pa_up)

c_0 = 1.0
x_g, w_g = p_roots(32)
x_c, w_c = c_roots(64)

if hasattr(k2, '__iter__'):
    s_mom = (None,)*len(k2.shape) + (slice(None,None,None),) + (None,)
    s_ang = (None,)*len(k2.shape) + (None,) + (slice(None,None,None),)
    p2 = k2[...,na,na]

l = (c_0 * (1+x_g)/(1-x_g))[s_mom]
x_g, w_g = x_g[s_mom], w_g[s_mom]
x_c, w_c = x_c[s_ang], w_c[s_ang]

#q=p-l, q2 = q^2 = p^2+l^2-2pl, p^2 = z(t)
q2 = p2 + l**2 - 2*sqrt(p2)*l*x_c
A_int = np.zeros(q2.shape)

l = 7700
req = real(np.ravel(q2))[l:10000]
imq = imag(np.ravel(q2))[l:10000]
reA = real(np.ravel(A_int))[l:10000]
x = req
y = imq
z = reA
# define grid.
xi = np.linspace(-.5,25.0,100)
yi = np.linspace(-1.,1.,50)
# grid the data.
zi = griddata(x,y,z,xi,yi)
print zi
Heini
User
Beiträge: 21
Registriert: Donnerstag 12. April 2007, 10:48

...ist ein pathologischer Fall bei dem der Triangulationsalg. versagt. Es hilft evtl. (in konkret obigem Fall) die Installation vom natgrid toolkit.
(hier http://www.lfd.uci.edu/~gohlke/pythonlibs/ auch für verschiedene pythons)
Antworten