我试图在Python中使用一些数据拟合曲线scipy.optimize.curve_fit.我遇到了错误ValueError: array must not contain infs or NaNs.
我不相信我的x或y数据包含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) 我试图用自定义概率密度函数拟合一些实验值的分布.显然,所得到的函数的积分应该总是等于1,但简单scipy.optimize.curve_fit(功能,dataBincenters,dataCounts)的结果从未满足该条件.解决这个问题的最佳方法是什么?
这是我的问题: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) 我不明白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功能适合xdata和ydata准确.为什么不是错误/差异0,或接近0,inf而是?
curve_fitSciPy参考指南中有这样的引用:
如果解的雅可比矩阵没有满秩,那么'lm'方法返回一个填充np.inf的矩阵,另一方面'trf'和'dogbox'方法使用Moore-Penrose伪逆来计算协方差矩阵.
那么,潜在的问题是什么?为什么解决方案中的雅可比矩阵不具有满秩?
我正在探索一些数据,所以我想要做的第一件事就是尝试将正态(高斯)分布拟合到它.这是我第一次在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)

由于我需要计数,我需要添加一个归一化因子(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)

当我发现这个线程谈到使用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) 我正在scipy.optimize.curve_fit()以迭代的方式使用.
我的问题是,当它无法适应参数时,整个程序(以及迭代)停止,这就是它给出的错误:
RuntimeError: Optimal parameters not found: Number of calls to function has reached maxfev = 800.
我明白为什么它无法适应.我的问题是,有什么办法可以在Python 3.2.2中编写程序来忽略这种情况而只是继续吗?
我正在寻找一种通过一些实验数据绘制曲线的方法.数据显示具有浅梯度的小线性区域,然后是阈值之后的陡峭线性区域.
我的数据在这里: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实施,他们将不胜感激.
我想使用Android图形使用如下绘制无缝曲线
canvas.quadTo(.....);
Run Code Online (Sandbox Code Playgroud)
Android参考说这个方法使用Bezier曲线
但是这种方法不支持具有三个以上点的绘制曲线
P1,P2,P3,P4,P5
我怎样画出如下曲线?
我听说这是"非线性曲线拟合".
Android有曲线拟合库吗?
我正在尝试使用SVG路径创建高性能,美观的铅笔工具.
我正在记录鼠标坐标以绘制路径.为了获得高保真路径(精确到用户的动作),我需要为每个像素移动记录一个点.
保持路径中的每个点都会产生大量的点,这对于后来的协作功能来说并不理想(来回发送大量的点效率不高),而且每次我需要操作它们时解析大路径是瓶颈
在路径的线性区域上,删除冗余点,仅保留表示段所需的点 - 我使用Ramer-Douglas-Peucker算法执行此操作.
此时,路径实际上只是连接线 - 因此路径看起来是锯齿状的.
一种可能的解决方案是将路径点与Cubic Bezier连接 - 但是这在简化路径上不起作用.每个点之间的距离太大,以至于Cubic Bezier"坐得"不错,因此平滑的路径不再准确地表示用户的预期路径.
另一个解决方案是在原始路径上简单地使用"后处理"算法,例如Schneider算法 - 这个算法实际上不会实时工作,因为它是一个性能猪
(我认为)可以使用的解决方案是使用Centripetal Catmull-Rom插值.

在我研究过的所有算法中,这似乎是最有希望的:
是的Catmull-ROM,其插入了一系列的常规X/Y点或完成原始路径必须由曲线的算法?
我给了一个数组,当我绘制它时,我得到一个带有一些噪音的高斯形状.我想要适合高斯.这是我已经拥有的,但是当我绘制这个时,我没有得到一个拟合的高斯,而是我只是得到一条直线.我尝试了很多不同的方法,但我无法理解.
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)

curve-fitting ×10
python ×7
scipy ×6
numpy ×2
android ×1
axis-labels ×1
bezier ×1
covariance ×1
datetime ×1
gaussian ×1
ggplot2 ×1
graph ×1
matplotlib ×1
mktime ×1
optimization ×1
r ×1
svg ×1