玩具示例:
import numpy as npimport scipy.interpolate as interpcoords = (np.array([-1,1]),np.array([-2,2]),np.array([-1,1]))coords_mesh = np.meshgrID(*coords,indexing="ij")fn_value = np.power(coords_mesh[0],2) + coords_mesh[1]*coords_mesh[2] # F(x,y,z)coords_array = np.vstack([x.flatten() for x in coords_mesh]).T # Columns are x,zunique_coords_array = np.vstack({tuple(row) for row in coords_array})unique_coords_array.shape == coords_array.shape # True,i.e. no duplicate coordsmy_grID_interp = interp.RegularGrIDInterpolator(points=coords,values=fn_value)my_grID_interp(np.array([0,0])) # Runs without errormy_rbf_interp = interp.Rbf(*[x.flatten() for x in coords_mesh],d=fn_value.flatten())## Error: numpy.linalg.linalg.linAlgError: singular matrix -- why?
我错过了什么?上面的示例使用函数F(x,z)= x ^ 2 y * z.我想使用Rbf来近似该函数.据我所知,没有重复的坐标:比较unique_coords_array和coords_array.
解决方法 我相信问题是你的意见:my_rbf_interp = interp.Rbf(*[x.flatten() for x in coords_mesh],d=fn_value.flatten())
你应该改为:
x,z = [x.flatten() for x in coords_mesh] my_rbf_interp = interp.Rbf(x,z,fn_value.flatten())
它应该工作.我认为你的原始公式是矩阵中的重复线,用于求解,因此具有与重复的非常相似的问题(即奇异矩阵).
如果你愿意的话:
d = fn_value.flatten() my_rbf_interp = interp.Rbf(*(x,d))
它也应该工作.
总结以上是内存溢出为你收集整理的Python Rbf给出奇异的矩阵错误,没有重复的坐标,为什么?全部内容,希望文章能够帮你解决Python Rbf给出奇异的矩阵错误,没有重复的坐标,为什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)