我在尝试scipy.interpolation.griddata帮助文件中给出的二维示例。
它适用于“最近”的插值。但它给出了一个用nan填充的矩阵,同时使用任何其他插值,如“线性”或“立方”。如果我给参数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')
我把网格z1和网格z2变成一个填充nan的矩阵。
更新:我在另一台Ubuntu11.10机器上安装了所有软件包。同样的剧本给出了完全正确的答案。以前我试过Porteus发行版(live slackware family)。因此,我想我可以安全地得出结论,这是我的安装中的一些问题。有人知道会出什么事吗?库冲突会导致这种行为吗?因为我的主要机器是Portues,所以我别无选择,只能修理里面的机器。
我在尝试scipy.interpolation.griddata帮助文件中给出的二维示例。它适用于“最近”的插值。但它给出了一个用nan填充的矩阵,同时使用任何其他插值,如“线性”或“立方”。如果我给参数fill_value=5,它会给矩阵填充5。这是因为安装问题吗?我试着和他们在帮助文档中给出的完全一样。但不知何故,它给出的结果就好像我要求插值的点位于输入点之外。(这不是!!我效仿了这个例子)我...
该算法的灵感来自于 John D'Errico 的工作https://www.mathworks.com/matlabcentral/fileexchange/4551-inpaint_
nan
s
但是,我确实注意到,与
griddata
相比,John D'Ericco 给
出
的 inpaint_
nan
s 算法提供了更高的梯度。 因此,该算法提供了另一种解决方案,有些人可能会觉得它很有帮助。
MATLAB
中
griddata
和
griddata
n
插
值
函数简单说明
本文会用容易理解的话解释下
griddata
和
griddata
n的用法,不会追求严谨,目的是抛砖引玉,帮助需要用到这两个
插
值
函数的同学尽快理解使用。
一、
griddata
函数是什么?
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
二、使用步骤
1.引入库
代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyp
在数学建模建立方格状态地图
中
,使用
scipy
.interpolate.
griddata
()
插
值
法遇到了一些问题,经过查阅官方文档和其他的一些博文,发现解释的不是很好,所以来补充补充
1、matlab的
griddata
()与
python
的
scipy
.interpolate.
griddata
()使用方法不同导致的报错
2、切片的时候,保存有原来数据的行索引导致的报错
3、数组的shape为(2, N)导致的报错
官方文档解释
链接:http://
scipy
.github.io/devdocs/ref
1.
插
值
scipy
.interpolate
SciPy
的interpolate模块提供了许多对数据进行
插
值
运算的函数,范围涵盖简单的一维
插
值
到复杂多维
插
值
求解。
一维
插
值
:当样本数据变化归因于一个独立的变量时;
多维
插
值
:反之样本数据归因于多个独立变量时。
注:一维
插
值
这里就不再讲述了,主要是对二维
插
值
的一个总结。
2.interp2d()
from
scipy
.interpolate import interp2d
interp2d(x,y,z,kind='linear')
这里有几个注意事项:
通常来说,一维
插
值
有很多方法,也比较容易实现。
griddata
()函数则是可以方便实现二维
插
值
。
例:图
中
有9个网格点,横坐标为a,纵坐标为b,蓝色的数字是这个点的函数
值
。
(不好意思,例子比较简单,我直接手画了)
由于整个网格由离散点组成,当我们想知道 (1.5, 1.5) 或者 (2.5, 2.5) 的坐标
值
的时候,是无法直接获取的,只能通过二维的
插
值
来得到,如下图。
这个时候就可以采用
griddata
()函数,代码如下:
import numpy as np
from
scipy
.
当你有一组二维数据点 (x,y) 和相应的
值
z,你可能需要在网格上进行
插
值
以获得平滑的二维函数。这种情况下,可以使用
Scipy
库
中
的 `
griddata
` 函数。
下面是一个简单的示例,演示如何使用 `
griddata
` 在网格上进行
插
值
:
```
python
import numpy as np
from
scipy
.interpolate import
griddata
import matplotlib.pyplot as plt
# 创建一些测试数据
points = np.random.rand(20, 2)
values = np.sin(3 * points[:, 0]) * np.cos(2 * points[:, 1])
# 定义网格范围
grid_x, grid_y = np.mgrid[0:1:100j, 0:1:100j]
# 使用
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')
# 绘制图形
fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(8, 8))
axs[0, 0].scatter(points[:, 0], points[:, 1], c=values)
axs[0, 0].set_title('Scatter plot')
axs[0, 1].imshow(grid_z0.T, extent=(0, 1, 0, 1), origin='lower')
axs[0, 1].set_title('Nearest')
axs[1, 0].imshow(grid_z1.T, extent=(0, 1, 0, 1), origin='lower')
axs[1, 0].set_title('Linear')
axs[1, 1].imshow(grid_z2.T, extent=(0, 1, 0, 1), origin='lower')
axs[1, 1].set_title('Cubic')
plt.tight_layout()
plt.show()
这个示例会生成一个 2x2 的子图表格,每个子图都显示了
插
值
方法的不同结果。