我正在尝试使用 python/numpy/scipy 编写一个脚本,用于数据操作、拟合和绘制与角度相关的磁阻测量。我是 Python 新手,从我的博士生导师那里得到了框架代码,并设法在框架中添加了几百行代码。过了一会儿,我注意到一些测量有多个错误,并且由于脚本应该自动完成所有操作,我尝试屏蔽这些点并将曲线拟合到未屏蔽的点(曲线是叠加在线性函数上的正弦平方,所以 numpy.ma.polyfit 并不是一个真正的选择)。但是,在屏蔽了问题点的 x 和 y 坐标后,拟合仍会考虑它们,即使它们不会显示在图中。这个例子被简化了,但同样的事情正在发生;
import numpy.ma as ma
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
def Funk(x, k, y0):
return k*x + y0
fig,ax= plt.subplots()
x=ma.masked_array([1,2,3,4,5,6,7,8,9,10],mask=[0,0,0,0,0,0,1,1,1,1])
y=ma.masked_array([1,2,3,4,5,30,35,40,45,50], mask=[0,0,0,0,0,1,1,1,1,1])
fitParamsFunk, fitCovariancesFunk = curve_fit(Funk, x, y)
ax.plot(x, Funk(x, fitParamsFunk[0], fitParamsFunk[1]))
ax.errorbar(x, y, yerr = None, ms=3, fmt='-o')
plt.show()
在写这篇文章时,我发现我可以做到这一点:
def Funk(x, k, y0):
return k*x + y0
fig,ax= plt.subplots()
x=np.array([1,2,3,4,5,6,7,8,9,10])
y=np.array([1,2,3,4,5,30,35,40,45,50])
mask=np.array([0,0,0,0,0,1,1,1,1,1])
fitParamsFunk, fitCovariancesFunk = curve_fit(Funk, x[mask], y[mask])
ax.plot(x, Funk(x, fitParamsFunk[0], fitParamsFunk[1]))
ax.errorbar(x, y, yerr = None, ms=3, fmt='-o')
plt.show()
我想 scipy curve_fit 并不是要处理蒙面数组,但我仍然想知道是否有任何解决方法(我需要使用蒙面数组,因为数据点的数量> 10e6,但我m 一次只绘制 100,因此我需要获取我想要绘制的数组部分的掩码并将其分配给另一个数组,同时将数组的值复制到另一个数组或将原始掩码设置为 False) ? 感谢您的任何建议