python - 具有“线性”和“立方”的 Scipy 网格数据产生 nan
问题描述
以下代码应生成网格数据。但如果我选择插值类型“立方”或“线性”,我会在 z 网格中得到 nan。温我选择'最近'一切运行良好。这是一个示例代码:
import numpy as np
from scipy.interpolate import griddata
x = np.array([0.03,0.05,0033])
y = np.array([0.004,0.01,0.02])
z = np.array([1,2,3])
xy = np.zeros((2,np.size(x)))
xy[0] = x
xy[1] = y
xy = xy.T
grid_x, grid_y = np.mgrid[0.0:0.09:250*1j, 0.0:0.03:250*1j] #generating the grid
i_type= 'cubic' #nearest, linear, cubic
grid_z = griddata(xy, z, (grid_x, grid_y), method=i_type)
#check if there is a nan in the z grid:
print np.isnan(grid_z).any()
我不知道为什么这不起作用..
解决方案
您查看的区域比您的输入点大得多。这对于“最近”无关紧要,因为这总是将最近的值放在某个坐标上。但是 'linear' 和 'cubic' 不会外推,而是默认用 nan 填充不在输入区域内的值。
另请参阅以下文档griddata
:
fill_value : float, optional
Value used to fill in for requested points outside of the convex hull of the input points. If not provided, then the default is nan. This option has no effect for the ‘nearest’ method.
绘制时最好理解imshow
:
创建的情节:
import numpy as np
from scipy.interpolate import griddata
x = np.array([0.03,0.05,0.033])
y = np.array([0.004,0.01,0.02])
z = np.array([1,2,3])
xy = np.zeros((2,np.size(x)))
xy[0] = x
xy[1] = y
xy = xy.T
grid_x, grid_y = np.mgrid[0.0:0.09:250*1j, 0.0:0.03:250*1j] #generating the grid
fig, axs = plt.subplots(3)
for i, i_type in enumerate(['cubic', 'nearest', 'linear']): #, cubic
grid_z = griddata(xy, z, (grid_x, grid_y), method=i_type)
#check if there is a nan in the z grid:
axs[i].imshow(grid_z)
axs[i].set_title(i_type)
plt.tight_layout()
推荐阅读
- python - Python: Whats the difference between directly importing and using 'from' keyword
- python-3.x - ImportError: cannot import name SignedJwtAssertionCredentials when oauth2client==4.0.0, neither using PyOpenSSL==20.0.1
- wordpress - 提交联系表格 7 后更改登录用户的角色
- jquery - 为什么onclick动作fontawesome后消失
- python - Tensorflow TimeseriesGenerator 参数混淆
- java - 无法将整个输入文件复制到Java中的输出文件
- jquery - Codeigniter Ajax 删除
- sql - Oracle:查找锁定的行返回错误的行 ID
- python - Pydantic 模型 w Fastapi 看不到属性
- linux - 重新加载虚拟机后 systemctl 恶魔不工作(ubuntu,azure)