如何解决在Python中平滑3D数据,LinAlgError:矩阵是奇异的
我有一些x和y相关的z值,这些值是通过实验而不是通过已知的基础函数计算的。我正在尝试获取数据的等高线图,但它看起来不太好。我正在尝试查看总体趋势,但是我所看到的只是原始数据的颤抖,嘈杂的行为(在底部链接)。 这是原始数据和原始数据的轮廓图:
我已经研究了How to smooth a curve in the right way?这个问题的答案,但是我不知道如何将其归纳为3D。我尝试使用插值法对其进行平滑处理,该方法适用于较小的数据集,但是现在我的代码抛出了无法解决的错误。这是我基于Python : 2d contour plot from 3 lists : x,y and rho?的答案的插值代码:
# Set up a regular grid of interpolation points
xi,yi = np.linspace(x.min(),x.max(),2*len(x)),np.linspace(y.min(),y.max(),2*len(y))
Xi,Yi = np.meshgrid(xi,yi)
# Interpolate
rbf = scipy.interpolate.Rbf(x,y,z,function='linear')
zi = rbf(Xi,Yi)
plt.imshow(zi,vmin=z.min(),vmax=gz.max(),origin='lower',extent=[x.min(),y.min(),y.max()])
plt.colorbar(orientation='horizontal')
plt.show()
及其引发的错误:
---------------------------------------------------------------------------
LinAlgError Traceback (most recent call last)
<ipython-input-14-94fc6fa88c01> in <module>
6
7 # Interpolate
----> 8 rbf = scipy.interpolate.Rbf(t1,t2,gbenergy,function='linear')
9 zi = rbf(Xi,Yi)
10
~/basicVenv/lib/python3.8/site-packages/scipy/interpolate/rbf.py in __init__(self,*args,**kwargs)
255 self.nodes[:,i] = linalg.lu_solve((lu,piv),self.di[:,i])
256 else:
--> 257 self.nodes = linalg.solve(self.A,self.di)
258
259 @property
~/basicVenv/lib/python3.8/site-packages/scipy/linalg/basic.py in solve(a,b,sym_pos,lower,overwrite_a,overwrite_b,debug,check_finite,assume_a,transposed)
212 (a1,b1))
213 lu,ipvt,info = getrf(a1,overwrite_a=overwrite_a)
--> 214 _solve_check(n,info)
215 x,info = getrs(lu,b1,216 trans=trans,overwrite_b=overwrite_b)
~/basicVenv/lib/python3.8/site-packages/scipy/linalg/basic.py in _solve_check(n,info,lamch,rcond)
27 '.'.format(-info))
28 elif 0 < info:
---> 29 raise LinAlgError('Matrix is singular.')
30
31 if lamch is None:
LinAlgError: Matrix is singular.
我尝试用Singular matrix issue with Numpy的答案来解决此问题,但没有运气。我愿意进行平滑或插值或其他选择,我只是希望轮廓图看起来比这更好。任何帮助将不胜感激。
我的数据:https://github.com/lydiash/stackOverflowDataArchive/blob/master/data.csv
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。