我正在尝试scipy.interpolation.griddata帮助文件中给出的第2个示例。 它适用于最近的'插值。但它使用任何其他插值,如线性'或者'立方体'如果我给出参数fill_value = 5,它给出填充了5的矩阵。
这是由于某些安装问题吗?
我正在尝试他们在帮助文档中提供的完全相同的内容。 但不知何故,它给出了结果,好像我要求插值的点位于输入点之外。 (这不是!!我按照例子)
我将发布示例以重现错误(采用doc格式)
def func(x, y):
return x*(1-x)*np.cos(4*np.pi*x) * np.sin(4*np.pi*y**2)**2
grid_x, grid_y = np.mgrid[0:1:10j, 0:1:10j]
points = np.random.rand(100, 2)
values = func(points[:,0], points[:,1])
from scipy.interpolate import griddata
grid_z0 = griddata(points, values, (grid_x, grid_y), method='nearest')
grid_z1 = griddata(points, values, (grid_x, grid_y), method='linear')
grid_z2 = griddata(points, values, (grid_x, grid_y), method='cubic')
我将grid_z1和grid_z2作为填充了nan的矩阵。
更新:我在另一台Ubuntu 11.10计算机上安装了所有软件包。并且相同的脚本给出了完全正确的答案。以前我在尝试使用Porteus发行版(实时slackware系列)。因此,我认为我可以安全地得出结论,这是我的安装中的一些问题。任何人都知道什么可能出错?任何图书馆冲突都会导致这种行为吗?由于我的主机是Portues,我没有其他选择,只能修复其中的scipy。
答案 0 :(得分:7)
你说“充满了南”,但它并没有真正充满。使用您的代码但添加
np.random.seed(7)
在开始时我们正在使用相同的数据集,我找到了
>>> np.isnan(grid_z1).sum()
744
>>> np.isnan(grid_z2).sum()
744
这些NaN发生在外面的一个乐队中:
>>> np.isnan(grid_z1[5:-5,5:-5]).sum()
0
这可能是问题所在。给出NaN的点在指定点之外,因此它不知道如何处理它们。对于“最近”插值的特殊情况,你仍然可以找到附近的东西,所以你没有得到任何NaN。
所以当你说要插入的点不在输入点之外时,我不同意:
# brute force, because I'm too lazy
from collections import Counter
d = Counter()
for x, y, val in zip(grid_x.flat, grid_y.flat, grid_z1.flat):
pg = (points >= [x, y])
boxed = len(set(tuple(p) for p in pg)) == 4
d[np.isnan(val), boxed] += 1
产生
>>> d
Counter({(False, True): 19189, (True, False): 744, (False, False): 67})
并且没有(True,True)案例。 IOW,每个NaN都缺少一个边界框。有一些(假,假)情况,其中值没有边界框,但没有结束NaN,这是有点令人惊讶的,但如果他们假设一切都被包含,它可能取决于无聊实现细节如果不是,会发生什么。简短版本:我认为这里的所有内容都可能正常工作,就像预期的那样。
答案 1 :(得分:1)
目前还不清楚你是如何安装scipy的(或者你正在使用哪个版本 - 尝试$ python -c "import scipy; print scipy.__version__"
来查找),但由于griddata依赖于已编译的代码,因此你所看到的可能就是结果构建问题或(不太可能)特定于您的平台的griddata错误。
我建议在scipy-user
邮件列表http://mail.scipy.org/mailman/listinfo/scipy-user上报告此问题,该列表比Stack Overflow更适合解决构建和安装问题。
在发布到邮件列表之前,值得安装nose
测试框架http://packages.python.org/nose,以便您可以运行
$ python -c "import scipy; scipy.test()"
并同时报告任何测试失败的详细信息。
答案 2 :(得分:0)
我有同样的问题,但我认为已经修复了scipy 0.11rc2(并不是说我能够在我的Enthought Python发行版的顶部安装它来查找..)?