【问题标题】:scipy griddata interpolation returns a vector filled with nanscipy griddata 插值返回一个用 nan 填充的向量
【发布时间】:2018-06-12 16:53:45
【问题描述】:

我有一个 3d 点列表,我想在 3d 网格上插值。

coords = array([[  8.33399963,  12.94800186,  15.22500038],
       [  8.57299995,  13.90000153,  14.14700031],...)

我有网格 x,y,z 坐标,它与 numpy.meshgrid 一起用于创建网格:

xi,yi,zi = np.meshgrid(bbox[:,0],bbox[:,1],bbox[:,2])

然后当我尝试执行插值时:

griddata(coords,np.random.choice([.1,1,2],size=len(coords)),(xi,yi,zi),method='linear')

我得到一个 nans 向量:

array([[[ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan],
        [ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan]],....

我在这里做错了什么?

【问题讨论】:

    标签: python numpy scipy


    【解决方案1】:

    我不知道xi,yi,zi 的值是什么,但很可能它们在coords 定义的域之外。如果使用meshgrid生成网格,那么注意数组的顺序:

    在输入长度为 MNP 的 3-D 情况下,对于 ‘xy’ 索引,输出的形状为 (N, M, P),对于 ‘ij’ 索引,输出形状为 (M, N, P)

    试试这个:

    In [61]: coords = 20 * np.random.random((200, 3)) - 1
    
    In [62]: xi, yi, zi = np.meshgrid(np.arange(coords[:, 0].min()+2, coords[:,0].max()-2), np.arange(coords[:, 1].min()+2, coords[:,1
        ...: ].max()-2), np.arange(coords[:, 2].min()+2, coords[:,2].max()-2), indexing='ij')
    
    In [63]: griddata(coords,np.random.choice([.1,1,2],size=len(coords)),(xi.astype(np.float), yi.astype(np.float), zi.astype(np.float
        ...: )),method='linear')
    

    您仍然会得到一些 nan 值,其中点对函数的采样不佳,但大多数值已定义。

    另一种可能是您看到的第一个“平面”可能主要包含nan。试试np.sum(np.isfinite(g)) 看看在np.prod(g.shape) 的所有点中有多少点是有效的,其中ggriddata() 的输出。

    【讨论】:

    • 谢谢,看来我的错误是这样的:np.meshgrid(bbox[:,0],bbox[:,1],bbox[:,2])。相反,我应该像这样使用 linspace 或 arange:np.linspace(np.min(bbox[:,0]),np.max(bbox[:,0])) 等。
    猜你喜欢
    • 2012-03-28
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2014-01-06
    • 2022-07-22
    • 2017-10-25
    • 2014-02-17
    • 1970-01-01
    相关资源
    最近更新 更多