【发布时间】:2012-07-12 09:48:17
【问题描述】:
!我有 (x,y,z) 形式的值。通过创建一个 list_plot3d 图,我可以清楚地看到它们的间距不是很均匀。它们通常在 xy 平面上形成 3 到 5 个点的小“斑点”。因此,为了使插值和最终的“轮廓”图更好,或者我应该说更平滑(?),我是否必须创建一个矩形网格(如棋盘上的正方形),以便数据块以某种方式“平滑”?我知道这对某些人来说可能是微不足道的,但我是第一次尝试这个,我有点挣扎。我一直在查看像 scipy.interplate.interp2d 这样的 scipy 包,但最后生成的图表非常糟糕。对于像我这样的业余爱好者来说,也许是一个关于 sagemath 中 2d 插值的简短教程?一些忠告?谢谢。
编辑:
https://docs.google.com/file/d/0Bxv8ab9PeMQVUFhBYWlldU9ib0E/edit?pli=1
这主要是它与此消息一起生成的图表类型:
Warning: No more knots can be added because the number of B-spline
coefficients
already exceeds the number of data points m. Probably causes:
either
s or m too small. (fp>s)
kx,ky=3,3 nx,ny=17,20 m=200 fp=4696.972223 s=0.000000
要得到这张图,我只需要运行这个命令:
f_interpolation = scipy.interpolate.interp2d(*zip(*matrix(C)),kind='cubic')
plot_interpolation = contour_plot(lambda x,y:
f_interpolation(x,y)[0], (22.419,22.439),(37.06,37.08) ,cmap='jet', contours=numpy.arange(0,1400,100), colorbar=True)
plot_all = plot_interpolation
plot_all.show(axes_labels=["m", "m"])
matrix(c) 可以是一个巨大的矩阵,例如 10000 X 3,甚至更像是 1000000 x 3。即使像我现在所附的图片那样,只有 matrix(C) 的数据较少,坏图的问题仍然存在200 x 3。这就是为什么我开始认为除了程序可能出现故障之外,我使用此命令的方法可能完全错误,因此我有理由寻求有关使用网格的建议和不仅仅是将我的数据“扔”到命令中。
【问题讨论】:
-
你能把剧情贴出来,描述一下有什么问题吗?
标签: numpy scipy interpolation contour sage