2013-10-08 26 views
5

Der folgende Aufruf:RBF Interpolation: LinAlgError: singuläre Matrix

rbf = Rbf(points[0], points[1], values,epsilon=2) 

führt zu einem Fehler:

LinAlgError: singular matrix 

mit den folgenden Werten:

In [3]: points 
Out[3]: 
(array([71, 50, 48, 84, 71, 74, 89, 76, 70, 77, 74, 79, 83, 71, 72, 78, 73, 
     84, 75, 65, 73, 82, 48, 86, 74, 86, 66, 74, 68, 74, 81, 74, 88, 66, 
     57, 50, 72, 86, 72, 92, 81, 67, 82, 78, 69, 70, 73, 71, 76, 72, 74, 
     75]), 
array([32, 34, 4, 35, 1, 7, 47, 16, 37, 14, 65, 18, 32, 4, 3, 27, 25, 
     34, 18, 25, 6, 25, 34, 41, 16, 35, 44, 2, 32, 2, 37, 60, 45, 32, 
     33, 42, 54, 31, 18, 38, 24, 18, 45, 48, 9, 63, 56, 45, 9, 59, 5, 
     12])) 

In [4]: values 
Out[4]: 
array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]) 

Was kann ich tun, um Vermeiden Sie es und lösen Sie immer noch das Interpolationsproblem?

+0

Wenn alle Werte 1 sind, dann wissen Sie bereits, dass der interpolierte Wert an jedem Punkt auch 1 sein sollte. Und wenn die Werte nicht alle 1 sind, dann stoßen Sie (wahrscheinlich?) Nicht auf den singulären Matrixfehler. – unutbu

+0

@unutbu - Ich dachte, rbf würde einen RBF um jeden Wert verwenden. Sollten die Werte nicht abnehmen, wenn ich mich für jede RBF von jeder 1 wegbewege? (d. h. ich würde für jeden Ort eine Summe von Gaussians erhalten) – Josh

+0

Die ** Summe ** der radialen Basisfunktionen muss an jedem der durch "Punkte" angegebenen Orte gleich 1 sein. Die einzelnen RBFs sind an diesen Punkten nicht gleich 1. Nur die Summe muss gleich 1 sein. Das Problem ist, dass es keine Summe von RBF gibt, die an allen diesen Punkten gleich 1 sein kann. – unutbu

Antwort

6

Ich denke, was Sie versuchen, ist kernel density estimation. Sie können scipy.stats.gaussian_kde für diesen Einsatz:

import numpy as np 
from scipy.stats import gaussian_kde 
from matplotlib import pyplot as pp 

# kernel density estimate of the PDF 
kde = gaussian_kde(points) 

# evaluate the estimated PDF on a grid 
x,y = np.mgrid[40:101,-20:101] 
z = kde((x.ravel(),y.ravel())).reshape(*x.shape) 

# plot 
fig,ax = pp.subplots(1,1) 
ax.hold(True) 
pc = ax.pcolor(x,y,z) 
cb = pp.colorbar(pc) 
cb.ax.set_ylabel('Probability density') 
ax.plot(points[0],points[1],'o',mfc='w',mec='k') 

pp.show() 

enter image description here

Das statsmodels Modul hat auch some more elaborate tools für Kerndichteschätzung.

0

Ich habe den gleichen Fehler. Endlich habe ich gefunden, warum ich den Fehler bekomme.

Sie haben 2 Punkte mit der gleichen Koordinate. (74,2) überprüfen Sie die Werte haben die gleiche Koordinate in 28., 30..

In meinem Denken, auch wenn Sie denselben Wert auf den gleichen Punkt haben, emittieren singuläre Matrixfehler.

Verwandte Themen