- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经搜索了使用抛物线和/或双曲线进行二维数据拟合的示例代码,但没有成功运行任何代码。
我使用了scipy.optimize.leastsq来进行拟合练习:
NEW修改代码如下:
def hyprsinc_errors(pararr, t,x,datarr):
x=np.array(x)
pararr[4] = np.abs(pararr[4])
outarr = np.zeros((np.size(t),np.size(x)),float)
for ix in x:
it = int(np.sqrt(pararr[0]*(ix-pararr[1])**2)+pararr[2])
if it < max(t)-int(pararr[4])-1:
for iit in range(-int(pararr[4])+it,it+int(pararr[4])+1,1):
outarr[iit,ix] =(-1)**int(pararr[4])*pararr[0]/pararr[3]
#end for it
outarr[it,ix]=pararr[3]
#end for ix
output = ((outarr-datarr).ravel()).sum()
print(type(output),output)
return np.float(output)
#
import numpy as np
import matplotlib as plt
from scipy.optimize import curve_fit
#
datarr = np.array([[ 4, 0, 1, 0, 2, 3, 1, 5, 2, 0],\
[ 2, 0, 0, 2, 1, 0, 5, 5, 3, 5],\
[ 4, 2, 0, 2, 0, 1, 5, 4, 3, 4],\
[ 2, 0, 1, 3, 5, 2, 3, 5, 3, 3],\
[ 5, 3, 3, 4, 12, 12, 5, 0, 2, 3],\
[ 2, 0, 5, 12, 12, 11, 13, 0, 4, 3],\
[ 5, 3, 12, 11, 2, 2, 10, 15, 2, 3],\
[ 1, 15, 11, 3, 4, 0, 0, 11, 10, 3],\
[14, 12, 1, 1, 2, 5, 3, 2, 12, 14],\
[10, 3, 4, 4, 1, 4, 0, 5, 4, 10]])
#
T = np.linspace(0, 9, 10)
X = np.linspace(0, 9, 10)
hyprsinc_errors((T,X),datarr, 1,4,4,10,0)
optimized_result = leastsq(hyprsinc_errors,x0=np.array([1.,5,5,10,0]),args=(T,X,datarr))
print("opt_result = ", optimized_result[0])
我收到新错误:
在[92]中:p1,success = lesssq(hyprsinc_errors,x0=np.array([1.,5,5,10,0]),args=(T,X,datarr))
> - TypeError Traceback (most recent call last)
> /nfs/rvl/sip/gs/nobackup3/holland/interferometry16/multiples/python_build/intel/python/<ipython-input-92-5f7acb18d23f>
> in <module>()
> ----> 1 p1,success = leastsq(hyprsinc_errors,x0=np.array([1.,5,5,10,0]),args=(T,X,datarr))
>
> /apps/sss/epd/7.2.2/lib/python2.7/site-packages/scipy/optimize/minpack.py
> in leastsq(func, x0, args, Dfun, full_output, col_deriv, ftol, xtol,
> gtol, maxfev, epsfcn, factor, diag)
> 276 m = _check_func('leastsq', 'func', func, x0, args, n)[0]
> 277 if n > m:
> --> 278 raise TypeError('Improper input: N=%s must not exceed M=%s' % (n,m))
> 279 if Dfun is None:
> 280 if (maxfev == 0):
>
> TypeError: Improper input: N=5 must not exceed M=1
<小时/>
最佳答案
curve_fit更适合拟合二维函数。您看到的错误是因为您将二维数组作为 ydata 参数传递,这意味着是一个 m 长度的数组(即一维)。大多数时候,沿着函数的单个切片拟合参数会产生不正确的结果。
我建议你使用least_squares而不是curve_fit。请记住,它的级别有点低:它要求您手动计算错误并提供对参数的猜测:
from scipy.optimize import least_squares
XX,YY = np.meshgrid(X,Y)
prbola_errors = lambda args: (prbola(XX,YY, *args) - dataarr).ravel()
optimize_result = least_squares(prbola_errors, (0., 1., 0., 1.))
这是一个演示:https://gist.github.com/FranciscoDA/378b2223957d2b0e201350b0e66aec84
编辑:关于更新的问题,需要修复一些问题:
x0
参数传递的参数数量与函数期望的参数数量不匹配(这里我添加了一个初始化为0 的虚拟变量)更新的代码:
import numpy as np
import matplotlib as plt
from scipy.optimize import curve_fit, leastsq
def hyprsinc_errors(pararr, t,x,datarr):
x=np.array(x)
pararr[4] = np.abs(pararr[4])
outarr = np.zeros((np.size(t),np.size(x)),float)
for ix in x:
it = int(np.sqrt(pararr[0]*(ix-pararr[1])**2)+pararr[2])
if it < max(t)-int(pararr[4])-1:
for iit in range(-int(pararr[4])+it,it+int(pararr[4])+1,1):
outarr[int(iit),int(ix)] =(-1)**int(pararr[4])*pararr[0]/pararr[3]
outarr[int(it),int(ix)]=pararr[3]
output = (outarr-datarr).ravel()
return output
#
#
datarr = np.array([[ 4, 0, 1, 0, 2, 3, 1, 5, 2, 0],\
[ 2, 0, 0, 2, 1, 0, 5, 5, 3, 5],\
[ 4, 2, 0, 2, 0, 1, 5, 4, 3, 4],\
[ 2, 0, 1, 3, 5, 2, 3, 5, 3, 3],\
[ 5, 3, 3, 4, 12, 12, 5, 0, 2, 3],\
[ 2, 0, 5, 12, 12, 11, 13, 0, 4, 3],\
[ 5, 3, 12, 11, 2, 2, 10, 15, 2, 3],\
[ 1, 15, 11, 3, 4, 0, 0, 11, 10, 3],\
[14, 12, 1, 1, 2, 5, 3, 2, 12, 14],\
[10, 3, 4, 4, 1, 4, 0, 5, 4, 10]])
#
T = np.linspace(0, 9, 10)
X = np.linspace(0, 9, 10)
optimized_result = leastsq(hyprsinc_errors,x0=np.array([1.,5,5,10,0,0]),args=(T,X,datarr))
print("opt_result = ", optimized_result[0])
示例输出:opt_result = [ 1.5.00000006 5.10.42857143 0.0.]
关于python - 在二维数据上拟合抛物线——已编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51414971/
gnuplot 中拟合函数的正确方法是什么 f(x)有下一个表格吗? f(x) = A*exp(x - B*f(x)) 我尝试使用以下方法将其拟合为任何其他函数: fit f(x) "data.txt
(1)首先要建立数据集 ? 1
测量显示一个信号,其形式类似于具有偏移量和因子的平方根函数。如何找到系数并在一个图中绘制原始数据和拟合曲线? require(ggplot2) require(nlmrt) # may be thi
我想将以下函数拟合到我的数据中: f(x) = Offset+Amplitudesin(FrequencyT+Phase), 或根据 Wikipedia : f(x) = C+alphasin(ome
我正在尝试使用与此工具相同的方法在 C# 中拟合 Akima 样条曲线:https://www.mycurvefit.com/share/4ab90a5f-af5e-435e-9ce4-652c95c
问题:开放层适合 map ,只有在添加特征之后(视觉),我该如何避免这种情况? 我在做这个 第 1 步 - 创建特征 var feature = new ol.Feature({...}); 第 2
我有一个数据变量,其中包含以下内容: [Object { score="2.8", word="Blue"}, Object { score="2.8", word="Red"}, Objec
我正在尝试用中等大小的 numpy float 组来填充森林 In [3]: data.shape Out[3]: (401125, 5) [...] forest = forest.fit(data
我想用洛伦兹函数拟合一些数据,但我发现当我使用不同数量级的参数时拟合会出现问题。 这是我的洛伦兹函数: function [ value ] = lorentz( x,x0,gamma,amp )
我有一些数据,我希望对其进行建模,以便能够在与数据相同的范围内获得相对准确的值。 为此,我使用 polyfit 来拟合 6 阶多项式,由于我的 x 轴值,它建议我将其居中并缩放以获得更准确的拟合。 但
我一直在寻找一种方法来使数据符合 beta 二项分布并估计 alpha 和 beta,类似于 VGAM 库中的 vglm 包的方式。我一直无法找到如何在 python 中执行此操作。有一个 scipy
我将 scipy.optimize.minimize ( https://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html ) 函数与
在过去的几天里,我一直在尝试使用 python 绘制圆形数据,方法是构建一个范围从 0 到 2pi 的圆形直方图并拟合 Von Mises 分布。我真正想要实现的是: 具有拟合 Von-Mises 分
我有一个简单的循环,它在每次迭代中都会创建一个 LSTM(具有相同的参数)并将其拟合到相同的数据。问题是迭代过程中需要越来越多的时间。 batch_size = 10 optimizer = opti
我有一个 Python 系列,我想为其直方图拟合密度。问题:是否有一种巧妙的方法可以使用 np.histogram() 中的值来实现此结果? (请参阅下面的更新) 我目前的问题是,我执行的 kde 拟
我有一个简单的 keras 模型(正常套索线性模型),其中输入被移动到单个“神经元”Dense(1, kernel_regularizer=l1(fdr))(input_layer) 但是权重从这个模
我正在尝试解决 Boston Dataset 上的回归问题在random forest regressor的帮助下.我用的是GridSearchCV用于选择最佳超参数。 问题一 我是否应该将 Grid
使用以下函数,可以在输入点 P 上拟合三次样条: def plotCurve(P): pts = np.vstack([P, P[0]]) x, y = pts.T i = np.aran
我有 python 代码可以生成数字 x、y 和 z 的三元组列表。我想使用 scipy curve_fit 来拟合 z= f(x,y)。这是一些无效的代码 A = [(19,20,24), (10,
我正在尝试从 this answer 中复制代码,但是我在这样做时遇到了问题。我正在使用包 VGAM 中的gumbel 发行版和 fitdistrplus . 做的时候出现问题: fit = fi
我是一名优秀的程序员,十分优秀!