La siguiente convocatoria:
rbf = Rbf(points[0], points[1], values,epsilon=2)
resulta en un error:
LinAlgError: singular matrix
con los siguientes valores:
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.])
¿Qué puedo hacer para evitarlo y resolver el problema de interpolación?
Creo que lo que estás tratando de hacer es estimar la densidad del kernel . Puedes usar scipy.stats.gaussian_kde
para esto:
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()
El módulo statsmodels
también tiene algunas herramientas más elaboradas para la estimación de la densidad del kernel.
Tengo el mismo error. Finalmente encontré por qué me sale el error.
Tienes 2 puntos con la misma coordenada. (74,2) verifique que los valores tengan la misma coordenada en 28, 30.
En mi opinión, incluso si tiene el mismo valor en el mismo punto, emite un error de matriz singular.