如何使用yscale(';log';)拟合曲线-Python

如何使用yscale(';log';)拟合曲线-Python,python,best-fit-curve,Python,Best Fit Curve,我一直在尝试将一些数据拟合到特定集合x和y的最佳拟合线。 我尝试了很多次都没有成功,我似乎找不到一种方法来使用yscale('log')和xscale('log')来拟合数据。我得到了这个奇怪的结果,但我似乎不明白为什么它会给出这个奇怪的[结果] [结果]: 我的代码: #!/usr/bin/env python # import the necessary modules import numpy as np import matplotlib.pyplot as plt # Genera

我一直在尝试将一些数据拟合到特定集合x和y的最佳拟合线。 我尝试了很多次都没有成功,我似乎找不到一种方法来使用yscale('log')和xscale('log')来拟合数据。我得到了这个奇怪的结果,但我似乎不明白为什么它会给出这个奇怪的[结果]

[结果]:

我的代码:

#!/usr/bin/env python 
# import the necessary modules
import numpy as np
import matplotlib.pyplot as plt

# Generate x and y values which the curve will be fitted to
# (In practical cases, these should be read in)
x = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048]
y = [497775, 150760, 50929, 19697, 8520, 3948, 1812, 710, 214, 57, 18, 4]

p = np.polyfit(x,y,1) 
plt.plot(x, np.polyval(p,x), 'r-')
plt.plot(x, y)
plt.yscale('log')
plt.xscale('log')
plt.show()

我有一种预感,这是因为我使用的是多元数,但我找不到如何计算对数。你能帮忙吗?我是新手,我需要帮助

在对数图上呈线性的东西不是线性函数,而是指数函数

您将获得最合适的产品线:

y = a * x + b
但您需要的是形式的最佳拟合指数函数:

y = a * x**k
有很多方法可以做到这一点。使用
polyfit
是一种很好的方法,但是您需要在“日志空间”中调整行。换句话说,将x的对数与y的对数拟合一行

例如,根据您的代码:

import numpy as np
import matplotlib.pyplot as plt

x = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048]
y = [497775, 150760, 50929, 19697, 8520, 3948, 1812, 710, 214, 57, 18, 4]

logx, logy = np.log(x), np.log(y)

p = np.polyfit(logx, logy, 1)
y_fit = np.exp(np.polyval(p, logx))

plt.plot(x, y_fit, 'r-')
plt.plot(x, y)
plt.yscale('log')
plt.xscale('log')
plt.show()

您能详细说明一下这是什么意思吗?在对数标度上绘制拟合数据本身并没有什么特别之处。你需要对数的性质来影响拟合吗?我只是不能为对数标度绘制拟合线!!