小编Zol*_*ern的帖子

使用scipy curve_fit进行正确拟合,包括x中的误差?

我正在尝试使用直方图来包含一些数据scipy.optimize.curve_fit.如果我想添加一个错误y,我可以通过应用一个weight适合来做到这一点.但是如何应用错误x(即直方图中由于分箱引起的错误)?

我的问题也适用于xcurve_fit或进行线性回归时的错误polyfit; 我知道如何添加错误y,但不是x.

这里有一个例子(部分来自matplotlib文档):

import numpy as np
import pylab as P
from scipy.optimize import curve_fit

# create the data histogram
mu, sigma = 200, 25
x = mu + sigma*P.randn(10000)

# define fit function
def gauss(x, *p):
    A, mu, sigma = p
    return A*np.exp(-(x-mu)**2/(2*sigma**2))

# the histogram of the data
n, bins, patches = P.hist(x, 50, histtype='step')
sigma_n = …
Run Code Online (Sandbox Code Playgroud)

python numpy curve-fitting scipy

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

如何在C++中正确递增返回的迭代器?

我有一个输入迭代器,CSVIterator如本SO 答案中所定义.

在我的程序中,我现在想要在函数中返回这样的迭代器并在我的函数中使用它main().返回迭代器,我可以访问其内容.但是在尝试迭代时,我遇到了分段错误.在返回函数内迭代起作用.

我有两个问题:

  1. 为什么我遇到了seg故障?我认为它是范围问题,但是不应该已经访问迭代器的内容导致分段错误?

  2. 我的问题怎么解决?我们的想法是在正确的迭代中将打开的文件切换到更大的循环中,并始终从该特定文件的开头开始.我来自Python背景和yield文件的一行之后另一个对我来说很自然,但也许在C++中不推荐它?

这是代码

// For the definition of CSVIterator, see
// https://stackoverflow.com/a/1120224/2525159
CSVIterator fileIter(int time)
{
    std::string tstring = std::to_string(time);
    std::string ext = ".csv";
    std::ifstream file(tstring + ext);
    CSVIterator iter(file);
    // This would work:
    // ++iter;
    return iter;
}

int main()
{
    CSVIterator csvit;
    for (i=0; i<10000; i++) {
        if (i%20 == 0) {
            csvit = fileIter(i);
        }

        // I can access the iterator's contents
        // like (*csvit)[0] correctly. …
Run Code Online (Sandbox Code Playgroud)

c++ iterator runtime-error segmentation-fault

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