Python使用Numpy.mgrid以及Numpy.重塑

2024-05-16 22:33:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚问了一个非常相似的问题,但是,我认为这还不够清楚。。。 所以我想用Numpy.mgrid为了拟合这个函数,我用最小二乘法最小化。 为此,我必须用Numpy.重塑. 在

我确信我的剧本质量!:)但是,结果是非常糟糕的,所以也许它可以作为起源的转变np.重塑...? 我可以不改变形状最小化吗? 非常感谢你的帮助!在

更多信息: https://stackoverflow.com/questions/23712377/python-use-of-numpy-mgrid-for-minimization

我的一小段代码,看看我是怎么做的:

例如(实际上:Lx=600,Ly=450)

import numpy as np
import scipy.optimize as sco

#Inputs

U2 = np.array([[  0.53,   -0.3,   -1.03, -1.79, -2.96, -2.87, -1.99],
[  0.3, -1.46, -1.54, -1.75, -1.95, -2.13, -0.17],
[0.11,  -1.74, -1.68, -1.68, -1.65, -1.77, 0.19],
[-0.53, -2.04, -1.90, -1.70, -1.6, -1.36, 0.31],
[-1.45, -2.41, -2., -1.83, -1.04, -1.04, 1.13]])


V2 = np.array([[ -12.97, -12.14, -13.3, -15.76, -10.95, -10.12, -10.6],
[-21.34, -22.39, -22.47, -22.62, -22.56, -22.4, -21.5],
[-21.27, -21.5, -21.7, -21.7,-21.7,-21.28, -21.11],
[-21.15, -22.05, -22.13, -22.2, -22.27, -21.95, -21.12],
[-21.43,-20.98, -21.62, -21.79,-21.33,-20.74,-19.48]])


V = -21.5*np.ones((5, 7))


#Definition of the grid

Lx=7.
Ly=5.

YA, XA = np.mgrid[-Ly/2:Ly/2, -Lx/2:Lx/2]


#I transform the 2D arrays in 1D arrays to do minimization

Vvect=np.reshape(V,Lx*Ly)

U2vect=np.reshape(U2,Lx*Ly)
V2vect=np.reshape(V2,Lx*Ly)

XAvect=np.reshape(XA,Lx*Ly)
YAvect=np.reshape(YA,Lx*Ly)


#Minimization

x0 = 0
y0 = 0
k1 = 2.49*10**(-7)

def residual_x(vars, XA, YA, x0, y0, V, donnees):
    k1 = vars[0]
    x0 = vars[1]
    y0 = vars[2]
    modele = (XA - x0) + k1*(XA - x0)*((XA - x0)**2 + (YA - (y0 + V.mean()))**2) - (XA - x0) + k1*(XA - x0)*((XA - x0)**2 + (YA - y0)**2) 
    return (donnees-modele)

from scipy.optimize import leastsq
vars = [k1, x0, y0]
out_x = sco.leastsq(residual_x, vars, args=(XAvect, YAvect, x0, y0, Vvect, U2vect),epsfcn=0.01)

print out_x


def residual_y(vars, XA, YA, x0, y0, V, donnees):
    k1 = vars[0]
    x0 = vars[1]
    y0 = vars[2]
    modele = (YA - (y0 + V.mean())) + k1*(YA - (y0 + V.mean()))*((XA - x0)**2 + (YA - (y0 + V.mean()))**2) - (YA - y0) + k1*(YA - y0)*((XA - x0)**2 + (YA - y0)**2) + V.mean() - V
    return (donnees-modele)

vars = [k1, x0, y0]
out_y = sco.leastsq(residual_y, vars, args=(XAvect, YAvect, x0, y0, Vvect, V2vect),epsfcn=0.01)

print out_y

当我说结果不好的时候,x0和y0代表了偏离的中心,但是正如你在下面看到的,它是一个非常重要的值。它一定离我的栅格中心很近。在

^{pr2}$

Tags: nplyk1varsoutmeanlxya