标签: curve-fitting

scipy.optimize.curvefit() - 数组不能包含infs或NaN

我试图在Python中使用一些数据拟合曲线scipy.optimize.curve_fit.我遇到了错误ValueError: array must not contain infs or NaNs.

我不相信我的xy数据包含infs或NaNs:

>>> x_array = np.asarray_chkfinite(x_array)
>>> y_array = np.asarray_chkfinite(y_array)
>>>
Run Code Online (Sandbox Code Playgroud)

给什么我的一些想法x_array,并y_array像在两端(x_array是计数,y_array是位数):

>>> type(x_array)
<type 'numpy.ndarray'>
>>> type(y_array)
<type 'numpy.ndarray'>
>>> x_array[:5]
array([0, 0, 0, 0, 0])
>>> x_array[-5:]
array([2919, 2965, 3154, 3218, 3461])
>>> y_array[:5]
array([ 0.9999582,  0.9999163,  0.9998745,  0.9998326,  0.9997908])
>>> y_array[-5:]
array([  1.67399000e-04,   1.25549300e-04,   8.36995200e-05,
     4.18497600e-05,  -2.22044600e-16])
Run Code Online (Sandbox Code Playgroud)

我的功能:

>>> def func(x,alpha,beta,b):
...    return ((x/1)**(-alpha) …
Run Code Online (Sandbox Code Playgroud)

python curve-fitting scipy

13
推荐指数
1
解决办法
8829
查看次数

如何对SciPy曲线拟合施加约束?

我试图用自定义概率密度函数拟合一些实验值的分布.显然,所得到的函数的积分应该总是等于1,但简单scipy.optimize.curve_fit(功能,dataBincenters,dataCounts)的结果从未满足该条件.解决这个问题的最佳方法是什么?

python optimization curve-fitting scipy

13
推荐指数
2
解决办法
1万
查看次数

曲线拟合为"datetime"格式的时间序列?

这是我的问题:polyfit不采用datetime值,因此我转换datetime并mktime生成多项式拟合

z4 = polyfit(d, y, 3) 
p4 = poly1d(z4)
Run Code Online (Sandbox Code Playgroud)

然而,对于情节,我想在轴上的日期时间描述,并没有#弄清楚如何做到这一点.你能帮助我吗?

fig = plt.figure(1)
cx= fig.add_subplot(111) 

xx = linspace(0,  d[3], 100)
pylab.plot(d, y, '+', xx, p4(xx),'-g')
cx.plot(d, y,'+', color= 'b', label='blub')
plt.errorbar(d, y,
           yerr,
           marker='.',
           color='k',
           ecolor='b',
           markerfacecolor='b',
           label="series 1",
           capsize=0,
           linestyle='')

cx.grid()
cx.set_ylim(0,0.03)
plt.show()
Run Code Online (Sandbox Code Playgroud)

其余代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import axis
from datetime import datetime
from numpy import *
import pylab
import time
Run Code Online (Sandbox Code Playgroud)

我的前4次数据点

x = [datetime(1978, 7, 7), 
     datetime(1980, …
Run Code Online (Sandbox Code Playgroud)

python datetime curve-fitting mktime axis-labels

13
推荐指数
1
解决办法
9220
查看次数

如果参数完全吻合,为什么`curve_fit`不能估计参数的协方差?

我不明白curve_fit是不是能够估计参数的协方差,从而提高了OptimizeWarning下面的内容.以下MCVE解释了我的问题:

MCVE python片段

from scipy.optimize import curve_fit
func = lambda x, a: a * x
popt, pcov = curve_fit(f = func, xdata = [1], ydata = [1])
print(popt, pcov)
Run Code Online (Sandbox Code Playgroud)

产量

\python-3.4.4\lib\site-packages\scipy\optimize\minpack.py:715:
OptimizeWarning: Covariance of the parameters could not be estimated
category=OptimizeWarning)

[ 1.] [[ inf]]
Run Code Online (Sandbox Code Playgroud)

对于a = 1功能适合xdataydata准确.为什么不是错误/差异0,或接近0,inf而是?

curve_fitSciPy参考指南中有这样的引用:

如果解的雅可比矩阵没有满秩,那么'lm'方法返回一个填充np.inf的矩阵,另一方面'trf'和'dogbox'方法使用Moore-Penrose伪逆来计算协方差矩阵.

那么,潜在的问题是什么?为什么解决方案中的雅可比矩阵不具有满秩?

python numpy covariance curve-fitting scipy

13
推荐指数
1
解决办法
2万
查看次数

试图用ggplot2的geom_smooth()显示原始数据和拟合数据(nls + dnorm)

我正在探索一些数据,所以我想要做的第一件事就是尝试将正态(高斯)分布拟合到它.这是我第一次在R中尝试这个,所以我一步一步.首先我预先分类我的数据:

myhist = data.frame(size = 10:27, counts = c(1L, 3L, 5L, 6L, 9L, 14L, 13L, 23L, 31L, 40L, 42L, 22L, 14L, 7L, 4L, 2L, 2L, 1L) )

qplot(x=size, y=counts, data=myhist)
Run Code Online (Sandbox Code Playgroud)

plot1

由于我需要计数,我需要添加一个归一化因子(N)来扩大密度:

fit = nls(counts ~ N * dnorm(size, m, s), data=myhist, start=c(m=20, s=5, N=sum(myhist$counts)) )   
Run Code Online (Sandbox Code Playgroud)

然后我创建适合显示的数据,一切都很好:

x = seq(10,30,0.2)
fitted = data.frame(size = x, counts=predict(fit, data.frame(size=x)) )
ggplot(data=myhist, aes(x=size, y=counts)) + geom_point() + geom_line(data=fitted)
Run Code Online (Sandbox Code Playgroud)

plot2

当我发现这个线程谈到使用geom_smooth()一步完成所有这一切时,我很兴奋,但我无法让它工作:

这是我尝试的......以及我得到的:

ggplot(data=myhist, aes(x=size, y=counts)) + geom_point() + geom_smooth(method="nls", formula = counts ~ N * …
Run Code Online (Sandbox Code Playgroud)

r curve-fitting ggplot2 least-squares model-fitting

12
推荐指数
1
解决办法
3065
查看次数

SciPy curve_fit运行时错误,停止迭代

我正在scipy.optimize.curve_fit()以迭代的方式使用.

我的问题是,当它无法适应参数时,整个程序(以及迭代)停止,这就是它给出的错误:

RuntimeError: Optimal parameters not found: Number of calls to function has reached maxfev = 800.

我明白为什么它无法适应.我的问题是,有什么办法可以在Python 3.2.2中编写程序来忽略这种情况而只是继续吗?

python curve-fitting scipy

12
推荐指数
1
解决办法
1万
查看次数

为由两个不同制度组成的数据拟合曲线

我正在寻找一种通过一些实验数据绘制曲线的方法.数据显示具有浅梯度的小线性区域,然后是阈值之后的陡峭线性区域.

我的数据在这里:http: //pastebin.com/H4NSbxqr
并在此处绘制

我可以相对容易地使用两条线来拟合数据,但我希望理想地使用连续线 - 这应该看起来像两条线,其中有一条平滑的曲线将它们连接在阈值附近(数据中约为5000,如上所示).

我试图使用scipy.optimize curve_fit并尝试一个包含直线和指数之和的函数:

y = a*x + b + c*np.exp((x-d)/e)
Run Code Online (Sandbox Code Playgroud)

尽管经过多次尝试,但它没有找到解决方案.

如果有人有任何建议,无论是选择配件分配/方法还是curve_fit实施,他们将不胜感激.

python numpy matplotlib curve-fitting scipy

12
推荐指数
2
解决办法
6711
查看次数

如何使用Android图形绘制无缝曲线?

我想使用Android图形使用如下绘制无缝曲线

 canvas.quadTo(.....);
Run Code Online (Sandbox Code Playgroud)

Android参考说这个方法使用Bezier曲线

但是这种方法不支持具有三个以上点的绘制曲线

P1,P2,P3,P4,P5

我怎样画出如下曲线?

MATLAB

我听说这是"非线性曲线拟合".

Android有曲线拟合库吗?

android bezier graph curve-fitting

12
推荐指数
1
解决办法
1412
查看次数

SVG路径上的Catmull-Rom插值

我正在尝试使用SVG路径创建高性能,美观的铅笔工具.

我正在记录鼠标坐标以绘制路径.为了获得高保真路径(精确到用户的动作),我需要为每个像素移动记录一个点.

保持路径中的每个点都会产生大量的点,这对于后来的协作功能来说并不理想(来回发送大量的点效率不高),而且每次我需要操作它们时解析大路径是瓶颈

在路径的线性区域上,删除冗余点,仅保留表示段所需的点 - 我使用Ramer-Douglas-Peucker算法执行此操作.

但是简化路径会将其转换为低保真多边形

此时,路径实际上只是连接线 - 因此路径看起来是锯齿状的.

一种可能的解决方案是将路径点与Cubic Bezier连接 - 但是这在简化路径上不起作用.每个点之间的距离太大,以至于Cubic Bezier"坐得"不错,因此平滑的路径不再准确地表示用户的预期路径.

另一个解决方案是在原始路径上简单地使用"后处理"算法,例如Schneider算法 - 这个算法实际上不会实时工作,因为它是一个性能猪

理想的解决方案

(我认为)可以使用的解决方案是使用Centripetal Catmull-Rom插值.

Centripetal Catmull Rom与其他Catmull-Rom变种

在我研究过的所有算法中,这似乎是最有希望的:

  1. 它不会在狭窄的角落产生自我交叉
  2. 它更适合点,因此它更准确地代表原始路径.

的Catmull-ROM,其插入了一系列的常规X/Y点或完成原始路径必须由曲线的算法?

svg curve-fitting computational-geometry catmull-rom-curve

12
推荐指数
1
解决办法
2458
查看次数

如何在python中拟合高斯曲线?

我给了一个数组,当我绘制它时,我得到一个带有一些噪音的高斯形状.我想要适合高斯.这是我已经拥有的,但是当我绘制这个时,我没有得到一个拟合的高斯,而是我只是得到一条直线.我尝试了很多不同的方法,但我无法理解.

random_sample=norm.rvs(h)

parameters = norm.fit(h)

fitted_pdf = norm.pdf(f, loc = parameters[0], scale = parameters[1])

normal_pdf = norm.pdf(f)

plt.plot(f,fitted_pdf,"green")
plt.plot(f, normal_pdf, "red")
plt.plot(f,h)
plt.show()
Run Code Online (Sandbox Code Playgroud)

点击图片

python gaussian curve-fitting scipy

12
推荐指数
2
解决办法
2万
查看次数