天道酬勤,学无止境

使用 numpy 或 scipy 将 3D 数据数组拟合到 1D 函数(Fitting a 3D array of data to a 1D function with numpy or scipy)

问题

4我目前正在尝试将大量数据拟合到正弦函数中。 在我只有一组数据(一维数组)的情况下, scipy.optimize.curve_fit()工作正常。 但是,如果函数本身只有一维,就我所见,它不允许更高维的数据输入。 我不想使用 for 循环遍历数组,因为它在 python 中的工作速度非常慢。

到目前为止,我的代码应该类似于:

from scipy import optimize
import numpy as np    
def f(x,p1,p2,p3,p4): return p1 + p2*np.sin(2*np.pi*p3*x + p4)      #fit function

def fit(data,guess):
   n = data.shape[0] 
   leng = np.arange(n)
   param, pcov = optimize.curve_fit(f,leng,data,guess)
   return param, pcov

其中 data 是一个三维数组( shape=(x,y,z) ),我想将每一行data[:,a,b]拟合到函数中, param是一个(4,y,z)形状的数组作为输出。 当然,对于多维数据,这会导致

ValueError: operands could not be broadcast together with shapes (2100,2100) (5)

也许有一个简单的解决方案,但我不知道该怎么做。 有什么建议?

搜索我的问题的答案非常困难,因为大多数带有这些关键字的主题都与高维函数的拟合有关。

回答1

使用 np.apply_along_axis() 可以解决您的问题。 只需这样做:

func1d = lambda y, *args: optimize.curve_fit(f, xdata=x, ydata=y, *args)[0] #<-- [0] to get only popt
param = np.apply_along_axis( func1d, axis=2, arr=data )

请参阅以下示例:

from scipy import optimize
import numpy as np
def f(x,p1,p2,p3,p4):
    return p1 + p2*np.sin(2*np.pi*p3*x + p4)
sx = 50  # size x
sy = 200 # size y
sz = 100 # size z
# creating the reference parameters
tmp = np.empty((4,sy,sz))
tmp[0,:,:] = (1.2-0.8) * np.random.random_sample((sy,sz)) + 0.8
tmp[1,:,:] = (1.2-0.8) * np.random.random_sample((sy,sz)) + 0.8
tmp[2,:,:] = np.ones((sy,sz))
tmp[3,:,:] = np.ones((sy,sz))*np.pi/4
param_ref = np.empty((4,sy,sz,sx))     # param_ref in this shape will allow an
for i in range(sx):                    # one-shot evaluation of f() to create 
    param_ref[:,:,:,i] = tmp           # the data sample
# creating the data sample
x = np.linspace(0,2*np.pi)
factor = (1.1-0.9)*np.random.random_sample((sy,sz,sx))+0.9
data = f(x, *param_ref) * factor       # the one-shot evalution is here
# finding the adjusted parameters
func1d = lambda y, *args: optimize.curve_fit(f, xdata=x, ydata=y, *args)[0] #<-- [0] to get only popt
param = np.apply_along_axis( func1d, axis=2, arr=data )

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 在Python中拟合多元curve_fit(fitting multivariate curve_fit in python)
    问题 我正在尝试将简单函数适合python中两个独立数据的数组。 我知道我需要将独立变量的数据打包到一个数组中,但是当我尝试进行拟合时,传递变量的方式似乎仍然存在问题。 (以前有几篇与此相关的文章,但并没有太大帮助。) import numpy as np import matplotlib.pyplot as plt from scipy.optimize import curve_fit def fitFunc(x_3d, a, b, c, d): return a + b*x_3d[0,:] + c*x_3d[1,:] + d*x_3d[0,:]*x_3d[1,:] x_3d = np.array([[1,2,3],[4,5,6]]) p0 = [5.11, 3.9, 5.3, 2] fitParams, fitCovariances = curve_fit(fitFunc, x_3d[:2,:], x_3d[2,:], p0) print ' fit coefficients:\n', fitParams 我读到的错误, raise TypeError('Improper input: N=%s must not exceed M=%s' % (n, m)) TypeError: Improper input: N=4 must not exceed M=3 M的长度是多少
  • 使用 3d 数据和参数在 Scipy 中进行曲线拟合(Curve fitting in Scipy with 3d data and parameters)
    问题 我正在努力在 scipy 中拟合 3d 分布函数。 我有一个 numpy 数组,在 x- 和 y-bin 中有计数,我试图将它拟合到一个相当复杂的 3-d 分布函数中。 数据适合 26 个 (!) 参数,这些参数描述了其两个组成群体的形状。 我在这里了解到,当我调用 leastsq 时,我必须将 x 和 y 坐标作为“args”传递。 unutbu 提供的代码按为我编写的方式工作,但是当我尝试将其应用于我的特定情况时,出现错误“TypeError: leastsq() got multiple values for keyword argument 'args'” 这是我的代码(抱歉长度): import numpy as np import matplotlib.pyplot as plt import scipy.optimize as spopt from textwrap import wrap import collections cl = 0.5 ch = 3.5 rl = -23.5 rh = -18.5 mbins = 10 cbins = 10 def hist_data(mixed_data, mbins, cbins): import numpy as np H, xedges, yedges = np.histogram2d(mixed_data[
  • python numpy / scipy曲线拟合(python numpy/scipy curve fitting)
    问题 我有一些要点,我正在努力为这些要点拟合曲线。 我知道存在scipy.optimize.curve_fit函数,但我不了解文档,即如何使用此函数。 我的观点: np.array([(1, 1), (2, 4), (3, 1), (9, 3)]) 有人可以解释该怎么做吗? 回答1 我建议您从简单多项式拟合开始,scipy.optimize.curve_fit尝试将必须知道的函数f拟合到一组点。 这是使用numpy.polyfit和poly1d的简单3度多项式拟合,第一个执行最小二乘多项式拟合,第二个计算新点: import numpy as np import matplotlib.pyplot as plt points = np.array([(1, 1), (2, 4), (3, 1), (9, 3)]) # get x and y vectors x = points[:,0] y = points[:,1] # calculate polynomial z = np.polyfit(x, y, 3) f = np.poly1d(z) # calculate new x's and y's x_new = np.linspace(x[0], x[-1], 50) y_new = f(x_new) plt.plot(x,y,'o', x_new, y_new) plt
  • 将高斯曲线拟合到python中的数据(Fitting Gaussian curve to data in python)
    问题 我正在尝试为某些给定数据拟合并绘制高斯曲线。 这是我到目前为止: import numpy as np import matplotlib.pyplot as plt from scipy.optimize import curve_fit # Generate data mu, sigma = 0, 0.1 y, xe = np.histogram(np.random.normal(mu, sigma, 1000)) x = .5 * (xe[:-1] + xe[1:]) def gauss (x, y): p = [x0, y0, sigma] return p[0] * np.exp(-(x-p[1])**2 / (2 * p[2]**2)) p0 = [1., 1., 1.] fit = curve_fit(gauss, x, y, p0=p0) plt.plot(gauss(x, y)) plt.show() 当我运行代码时,我收到此错误: TypeError: gauss() takes exactly 2 arguments (4 given) 我不明白我在哪里给了我的函数 4 个参数。 我也不相信我正确使用了曲线函数,但我不确定我做错了什么。 任何帮助,将不胜感激。 编辑 这是回溯: Traceback (most recent call last)
  • 将正态分布拟合到一维数据(Fitting a Normal distribution to 1D data)
    问题 我有一个一维数组。 我可以计算此样本的“均值”和“标准偏差”,并绘制“正态分布”,但是我有一个问题: 我想在同一图中绘制数据和正态分布。 我不知道如何绘制数据和正态分布。 对“ scipy.stats中的高斯概率密度函数”有任何想法吗? s = np.std(array) m = np.mean(array) plt.plot(norm.pdf(array,m,s)) 回答1 您可以使用matplotlib绘制直方图和PDF(如@MrE答案中的链接)。 为了适合和计算PDF,可以使用scipy.stats.norm ,如下所示。 import numpy as np from scipy.stats import norm import matplotlib.pyplot as plt # Generate some data for this demonstration. data = norm.rvs(10.0, 2.5, size=500) # Fit a normal distribution to the data: mu, std = norm.fit(data) # Plot the histogram. plt.hist(data, bins=25, density=True, alpha=0.6, color='g') # Plot the PDF
  • 不同维度变量的Python曲面拟合得到未知参数?(Python surface fitting of variables of different dimensionto get unknown parameters?)
    问题 我有一个包含 x 和 y 作为自变量的函数,我想将参数拟合到数据和函数并绘制曲面图。 我看到如果变量有两个不同的维度,我可以使用np.meshgrid(x,y) ,但是我如何找到参数 a,b,c? 我的代码如下所示: import matplotlib.pyplot as plt from scipy.optimize import curve_fit import numpy as np x = np.array([1,0.5,0.33,0.25,0.2]) y = np.array([1e-9,1e-8,1e-7,1e-6,1e-5,1e-4,1e-3,1e-2,1e-1,1e0,1e1,1e2,1e3,1e4,1e5]) def func(x,y,a,b,c): return (1-(a/(a+y)^b))*(1-np.exp(-c*x)) x,y = np.meshgrid(x,y) 我还可以将curve_fit用于这种类型的函数吗? 如果是这样,我如何使用它来查找 a、b、c 并绘制 3d 函数? 回答1 这是一个带有 3D 散点图、3D 曲面图和等高线图的示例。 import numpy, scipy, scipy.optimize import matplotlib from mpl_toolkits.mplot3d import Axes3D from
  • 将曲线拟合到 Python 中的直方图(Fit a curve to a histogram in Python)
    问题 我试图使曲线拟合 matplotlib 生成的直方图中的值: n, bins, patches = plt.hist(myData) 其中“plt”代表 matplotlib.pyplot,而 myData 是一个数组,每个索引的出现次数为 [9,3,3,....] 我希望 bin 是我的 x 数据,n 是我的 y 数据。 也就是说,我想提取有关数字 x occors 与数字 x 发生频率的信息。 但是,我无法让 bins 和 n 具有相同的大小。 所以基本上,我希望能够将曲线拟合到 n(bins, params)。 怎么做呢? 回答1 从 matplotlib.pyplot.hist 的文档中: 退货 n : 数组或数组列表直方图 bin 的值。 有关可能的语义的描述,请参阅normed和weights 。 如果输入x是一个数组,那么这是一个长度为nbins的数组。 如果 input 是一个序列数组[data1, data2,..] ,那么这是一个数组列表,其中每个数组的直方图值都按相同的顺序排列。 箱:数组垃圾箱的边缘。 长度 nbins + 1(nbins 最后一个 bin 的左边缘和右边缘)。 即使传入多个数据集,也始终是单个数组。 补丁:列表或列表列表如果有多个输入数据集,则用于创建直方图或此类列表的列表的单个补丁的静默列表。 正如您所看到的,第二个返回实际上是
  • 将圆柱体拟合到分散的 3D XYZ 点数据(Fit a cylinder to scattered 3D XYZ point data)
    问题 如标题所示,我想用 Python 将一个圆柱体拟合到一组 3D 点上。 这是一个很好的 MATLAB 解决方案。 我们如何用 Python 做到这一点? 回答1 David Eberly 站点上有一篇论文“Fitting 3D Data with a Cylinder”,描述了数学基础知识并显示了伪代码。 您还可以参考同一站点上几何工具引擎中的 C++ 代码。 我认为一些辅助数学函数如矩阵求逆等可以在 NymPy 中实现。 回答2 使用 scipy.optimize.leastsq,我们可以创建一个误差函数,其中观察到的圆柱半径和建模半径之间的差异被最小化。 以下是拟合垂直圆柱体的示例 import numpy as np from scipy.optimize import leastsq def cylinderFitting(xyz,p,th): """ This is a fitting for a vertical cylinder fitting Reference: http://www.int-arch-photogramm-remote-sens-spatial-inf-sci.net/XXXIX-B5/169/2012/isprsarchives-XXXIX-B5-169-2012.pdf xyz is a matrix contain at least
  • 将闭合曲线拟合到一组点(Fitting a closed curve to a set of points)
    问题 我有一组点pts ,它们构成一个循环,看起来像这样: 这有点类似于31243002,但是我不想在点对之间放置点,而是希望通过点拟合一条平滑的曲线(在问题的末尾给出坐标),因此我尝试了类似scipy文档的方法插值: values = pts tck = interpolate.splrep(values[:,0], values[:,1], s=1) xnew = np.arange(2,7,0.01) ynew = interpolate.splev(xnew, tck, der=0) 但是我得到这个错误: ValueError:输入数据错误 有什么办法可以找到这样的合适人选吗? 点的坐标: pts = array([[ 6.55525 , 3.05472 ], [ 6.17284 , 2.802609], [ 5.53946 , 2.649209], [ 4.93053 , 2.444444], [ 4.32544 , 2.318749], [ 3.90982 , 2.2875 ], [ 3.51294 , 2.221875], [ 3.09107 , 2.29375 ], [ 2.64013 , 2.4375 ], [ 2.275444, 2.653124], [ 2.137945, 3.26562 ], [ 2.15982 , 3.84375 ], [ 2.20982
  • 3d 点云中的平面拟合(Plane fitting in a 3d point cloud)
    问题 我正在尝试使用回归公式 Z= aX + bY +C 在 3d 点云中找到平面 我实现了最小二乘法和 ransac 解决方案,但 3 参数方程将平面拟合限制为 2.5D - 该公式不能应用于平行于 Z 轴的平面。 我的问题是如何将平面拟合推广到全 3d ? 我想添加第四个参数以获得完整的方程 a X +b Y +c*Z + d 如何避免琐碎的 (0,0,0,0) 解? 谢谢! 我正在使用的代码: from sklearn import linear_model def local_regression_plane_ransac(neighborhood): """ Computes parameters for a local regression plane using RANSAC """ XY = neighborhood[:,:2] Z = neighborhood[:,2] ransac = linear_model.RANSACRegressor( linear_model.LinearRegression(), residual_threshold=0.1 ) ransac.fit(XY, Z) inlier_mask = ransac.inlier_mask_ coeff = model_ransac.estimator_.coef_ intercept =
  • 在3D中拟合线(Fitting a line in 3D)
    问题 是否有任何算法可以从一组3D数据点返回直线方程? 我可以找到很多资料来源,这些资料将根据2D数据集给出一条直线方程,但在3D中则没有。 谢谢。 回答1 如果要从其他两个预测一个值,则应将lstsq与a作为自变量(加上一列1的值来估计截距)一起使用,并将b作为因变量。 另一方面,如果您只想获得与数据最佳的拟合线,即,如果将数据投影到该线上,该线将使实点与其投影之间的平方距离最小,那么您想要的是是第一个主要组成部分。 定义它的一种方法是其方向向量是与最大特征值相对应的协方差矩阵的特征向量的线,该线穿过数据的均值。 也就是说, eig(cov(data))是计算它的一种非常糟糕的方法,因为它执行了许多不必要的计算和复制,并且可能不如使用svd准确。 见下文: import numpy as np # Generate some data that lies along a line x = np.mgrid[-2:5:120j] y = np.mgrid[1:9:120j] z = np.mgrid[-5:3:120j] data = np.concatenate((x[:, np.newaxis], y[:, np.newaxis], z[:, np.newaxis]), axis=1) # Perturb with some Gaussian noise data += np
  • 【Python学习之路】Scipy 曲线拟合
    曲线拟合 导入基础包: import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt 多项式拟合 导入线多项式拟合工具: from numpy import polyfit, poly1d 产生数据: x = np.linspace(-5, 5, 100) y = 4 * x + 1.5 noise_y = y + np.random.randn(y.shape[-1]) * 2.5 画出数据: %matplotlib inline p = plt.plot(x, noise_y, 'rx') p = plt.plot(x, y, 'b:') [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8jhtsRqp-1576402187513)(04.04-curve-fitting_files/04.04-curve-fitting_9_0.png)] 进行线性拟合,polyfit 是多项式拟合函数,线性拟合即一阶多项式: coeff = polyfit(x, noise_y, 1) print coeff [ 3.93921315 1.59379469] 一阶多项式 y = a 1 x + a 0 y = a_1 x + a_0 y=a1​x+a0​ 拟合
  • 在 Python 中拟合数据的总和(Fitting a sum to data in Python)
    问题 鉴于拟合函数的类型为: 我打算将这样的函数拟合到我拥有的实验数据 (x,y=f(x)) 中。 但后来我有一些疑问: 当涉及求和时,如何定义我的拟合函数? 一旦定义了函数,即def func(..) return ...是否仍然可以使用 scipy.optimize 中的 curve_fit ? 因为现在有一组参数 s_i 和 r_i 与通常的拟合情况相比,其中一个参数很少。 最后,这种情况是否完全不同? 感觉有点迷失在这里,感谢您的帮助。 回答1 这在scipy.optimize.curve_fit (或只是scipy.optimize.leastsqr )范围内非常好。 涉及和的事实根本无关紧要,您也没有参数数组。 唯一需要注意的是, curve_fit想要为您的拟合函数提供参数作为单独的参数,而leastsqr提供单个向量。 这是一个解决方案: import numpy as np from scipy.optimize import curve_fit, leastsq def f(x,r,s): """ The fit function, applied to every x_k for the vectors r_i and s_i. """ x = x[...,np.newaxis] # add an axis for the summation # by
  • 将多项式拟合到数据(Fitting polynomials to data)
    问题 给定一组值(x,f(x)) ,是否可以找到最适合数据的给定度数的多项式? 我知道多项式插值法,用于在给定n+1数据点的情况下找到度为n的多项式,但是这里有大量的值,我们想找到一个低次多项式(找到最佳线性拟合,最佳二次拟合,最佳立方等)。 它可能与最小二乘有关... 更笼统地说,当我们有一个多元函数(例如(x,y,f(x,y))并想找到最佳多项式( p(x,y)时,我想知道答案。 )中变量的给定程度。 (特别是多项式,而不是样条或傅立叶级数。) 理论和代码/库(最好使用Python,但可以使用任何语言)都将很有用。 回答1 感谢大家的答复。 这是总结它们的另一种尝试。 如果我说太多“明显”的事情,请原谅:我以前对最小二乘一无所知,所以一切对我来说都是新的。 非多项式插值 多项式插值法在给定n+1数据点的情况下拟合度为n的多项式,例如,找到正好通过四个给定点的三次方。 如问题中所述,这不是我想要的-我有很多要点,并且想要一个小次数的多项式(除非我们很幸运,否则它只能近似拟合)-但由于某些答案坚持要讨论关于这一点,我应该提一下:) Lagrange多项式,Vandermonde矩阵等。 什么是最小二乘? “最小二乘”是多项式拟合的“良好程度”的特定定义/标准/“度量”。 (还有其他方法,但这是最简单的方法。)假设您尝试将多项式p(x,y)= a + bx + cy + dx 2 +
  • matplotlib中的曲面图(surface plots in matplotlib)
    问题 我有一个3元组的列表,表示3D空间中的一组点。 我想绘制一个覆盖所有这些点的表面。 mplot3d软件包中的plot_surface函数要求将X,Y和Z作为2d数组作为参数。 plot_surface是绘制表面的正确函数吗,如何将数据转换为所需的格式? data = [(x1,y1,z1),(x2,y2,z2),.....,(xn,yn,zn)] 回答1 对于曲面,它与三元组列表略有不同,您应该为2d数组中的域传递网格。 如果您只拥有3d点的列表,而不是某些函数f(x, y) -> z ,那么您将遇到问题,因为有多种方法可以将3d点云三角化为曲面。 这是一个光滑的表面示例: import numpy as np from mpl_toolkits.mplot3d import Axes3D # Axes3D import has side effects, it enables using projection='3d' in add_subplot import matplotlib.pyplot as plt import random def fun(x, y): return x**2 + y fig = plt.figure() ax = fig.add_subplot(111, projection='3d') x = y = np.arange(-3.0, 3
  • 如何使用 scipy 获得非平滑的 2D 样条插值(How to get a non-smoothing 2D spline interpolation with scipy)
    问题 我想要一个适合一些不规则间隔数据的 2D 三次样条 - 即一个完全适合给定点数据的函数 - 但也可以返回两者之间的值。 我所能找到的(对于不规则间隔数据)是scipy.interpolate.SmoothBivariateSpline 。 我不知道如何关闭“平滑”(无论我在s参数中输入什么值。 然而,我确实发现我可以通过scipy.interpolate.griddata获得我想要的大部分内容 - 尽管这必须每次都重新计算(即不只是生成一个函数)。 从根本上说,这两者之间有什么区别 - 即griddata做的事情与“样条”不同吗? 无论如何要关闭SmoothBivariateSpline平滑或不平滑的等效函数? 以下是我用来测试样条曲线与多项式拟合的脚本 import numpy as np from mpl_toolkits.mplot3d import Axes3D import scipy.optimize import scipy.interpolate import matplotlib.pyplot as plt import numpy.polynomial.polynomial as poly # Grid and test function N = 9; x,y = np.linspace(-1,1, N), np.linspace(-1,1, N) X,Y
  • SciPy,非矩形网格中的2D插值问题(Problem with 2D interpolation in SciPy, non-rectangular grid)
    问题 我一直在尝试使用scipy.interpolate.bisplrep()和scipy.interpolate.interp2d()在我的(218x135)2D球形极坐标网格上查找数据的插值。 我将网格节点的笛卡尔位置的二维数组X和Y传递给这些数组。 我不断收到如下错误(对于interp2d的线性插入): “警告:无法添加更多的结,因为该额外的结将与一个旧的结重合。可能导致:s太小或太大而导致数据点不准确。(fp> s)kx,ky = 1,1 nx ,ny = 4,5 m = 29430 fp = 1390609718.902140 s = 0.000000“ 对于带有平滑参数s等默认值的双变量样条曲线,我得到了类似的结果。我的数据很平滑。 我在下面附加了我的代码,以防万一我做错了明显的事情。 有任何想法吗? 谢谢! 凯尔 class Field(object): Nr = 0 Ntheta = 0 grid = np.array([]) def __init__(self, Nr, Ntheta, f): self.Nr = Nr self.Ntheta = Ntheta self.grid = np.empty([Nr, Ntheta]) for i in range(Nr): for j in range(Ntheta): self.grid[i,j] = f[i
  • 基于通过散点的类别的彩色 3D 表面(Color 3D Surface Based on Categories that passes through scatter points)
    问题 我有以下格式的数据: X,Y,Z,类别 我使用 plotly 生成散点图,然后使用以下代码通过散点拟合曲线。 from scipy.interpolate import griddata import numpy as np import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d import Axes3D x=np.asarray([3,5,9,3,3,7,6,9,1,9]); y=np.asarray([4,3,3,10,8,2,4,10,9,3]); z=np.asarray([1,2,4,10,1,7,10,3,1,7]); # x = np.random.random(100) xi=np.linspace(min(x), max(x),50) #print xi yi=np.linspace(min(y),max(y),50) X,Y= np.meshgrid(xi,yi) Z = np.nan_to_num(griddata((x,y), z, (X, Y), method='cubic')) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter(x, y, z
  • Fitting a 3D array of data to a 1D function with numpy or scipy
    4I am currently trying to fit a lot of data to a sine function. In the case where I only have one set of data (1D array), scipy.optimize.curve_fit() works fine. However it does not permit a higher dimensional data input if the function itself is only one dimensional as far as i can see. I don't want to iterate over the array using for loops as that works incredibly slow in python. My code so far should look similar to this: from scipy import optimize import numpy as np def f(x,p1,p2,p3,p4): return p1 + p2*np.sin(2*np.pi*p3*x + p4) #fit function def fit(data,guess): n = data.shape[0] leng = np
  • 用(python)Scipy拟合伽马分布(Fitting a gamma distribution with (python) Scipy)
    问题 谁能帮助我在python中拟合伽玛分布? 好吧,我有一些数据:X和Y坐标,我想找到适合此分布的伽玛参数...在Scipy文档中,事实是实际上存在一个fit方法,但我不知道如何要使用它:..首先,参数“数据”必须采用哪种格式,由于我要查找的是第二个参数(参数),我该如何提供呢? 回答1 生成一些伽玛数据: import scipy.stats as stats alpha = 5 loc = 100.5 beta = 22 data = stats.gamma.rvs(alpha, loc=loc, scale=beta, size=10000) print(data) # [ 202.36035683 297.23906376 249.53831795 ..., 271.85204096 180.75026301 # 364.60240242] 在这里,我们将数据拟合为伽马分布: fit_alpha, fit_loc, fit_beta=stats.gamma.fit(data) print(fit_alpha, fit_loc, fit_beta) # (5.0833692504230008, 100.08697963283467, 21.739518937816108) print(alpha, loc, beta) # (5, 100.5, 22) 回答2 我不满意ss