scipy griddata interpolation返回填充了nan的向量

时间:2018-06-12 08:14:07

标签: python numpy scipy

我在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]],....

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

我不知道xi,yi,zi值是多少,但最有可能超出coords定义的域。如果使用meshgrid生成网格,请注意数组的顺序:

  

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

试试这个:

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值,其中点对函数进行不良的采样,但大多数值都已定义。

另一种可能性是你只是看到了第一架飞机&#34;其中可能主要包含nan。试试np.sum(np.isfinite(g)),了解np.prod(g.shape)中从g输出griddata()的所有点$.fn.wrapInTag = function(opts) { var tag = opts.tag || 'strong', words = opts.words || [], regex = RegExp(words.join('|'), 'gi'), replacement = '<strong>$&</strong>'; return this.html(function() { return $(this).text().replace(regex, replacement); }); }; $('p').wrapInTag({ tag: 'em', words: ['#boldworld'] });中的点数是如何有效的。