import numpy as np from scipy.optimize import curve_fit def covar2d(k): x=[] cov=[] nx=k.shape[0] for h in range(nx): x.append(h) kx,kh=k[:nx-h,:].reshape(-1),k[h:,:].reshape(-1) cov.append(np.mean((kx*kh)-(np.mean(kx)*np.mean(kh)))) return cov,x def vario2d(k): x=[] vario=[] nx=k.shape[0] for h in range(nx): x.append(h) kx,kh=k[:nx-h,:].reshape(-1),k[h:,:].reshape(-1) vario.append(np.mean((kh-kx)**2)) return vario,x def vario3d(k): x=[] vario=[] nx=k.shape[0] for h in range(nx): x.append(h) kx,kh=k[:nx-h,:,:].reshape(-1),k[h:,:,:].reshape(-1) vario.append(np.mean((kh-kx)**2)) return vario,x def modelcovexp(h,a,c): return c*(np.exp(-h/a)) def modelcovexpLin(h,a,c): return c-h/a def modelvarioexp(h,a,c): return c*(1-np.exp(-h/a)) def modelcovgauss(h,a,c): return c*(np.exp(-(h/a)**2)) def modelvariogauss(h,a,c): return c*(1-np.exp(-(h/a)**2)) def get_CovPar2d(k,model): cov,x=vario2d(k) popt, pcov = curve_fit(model, x, cov) return np.abs(popt[0]) #Ic,varianza def get_varPar3d(k,model): vario,x=vario3d(k) popt, pcov = curve_fit(model, x, vario) return np.abs(popt[0]) #Ic,varianza def get_lc(k,vario): if vario==2: model=modelvariogauss mult=np.sqrt(3) else: model=modelvarioexp mult=3 if k.shape[2]==1: lc=get_CovPar2d(k,model)*mult else: lc=get_varPar3d(k,model)*mult return lc