我需要重新采样二维数据到一个规则的网格。
这就是我的代码:
import matplotlib.mlab as ml
import numpy as np
y = np.zeros((512,115))
x = np.zeros((512,115))
# Just random data for this test:
data = np.random.randn(512,115)
# filling the grid coordinates:
for i in range(512):
y[i,:]=np.arange(380,380+4*115,4)
for i in range(115):
x[:,i] = np.linspace(-8,8,512)
y[:,i] -= np.linspace(-0.1,0.2,512)
# Defining the regular grid
y_i = np.arange(380,380+4*115,4)
x_i = np.linspace(-8,8,512)
resampled_data = ml.griddata(x,y,data,x_i,y_i)
(512115)是二维数据的形状,我已经安装了mpl_toolkits.natgrid。
我的问题是,我得到了一个蒙面数组,其中大多数条目是nan,而不是一个数组,它主要由常规条目组成,在边界处只有nan。
有人能告诉我我做错了什么吗?
谢谢!
把你的代码示例和你的问题标题比较,我觉得你有点困惑。。。
在您的示例代码中,您正在创建规则网格化的随机数据,然后将其重新采样到另一个规则网格。你的例子中没有任何不规则的数据。。。
(另外,代码没有按原样运行,您应该查看^{} ,而不是循环生成x&y网格。)
如果您想重新采样一个已经定期采样的网格,就像您在示例中所做的那样,有比griddata或下面我将要描述的任何方法更有效的方法。(^{} 非常适合您的问题,如果是这样的话。)
然而,根据你的问题,听起来你有不规则的间隔数据,你想插入到一个规则的网格上。
在这种情况下,您可能有以下几点:
然后你可以像以前那样插入数据。。。(从上面的代码片段继续…)
但是,您会注意到网格中有很多工件。这是因为x坐标在-8到8之间,而y坐标在~300到~2500之间。插值算法试图使事物各向同性,而您可能需要一个高度各向异性的插值(以便在绘制网格时它看起来各向同性)。
若要更正此问题,您需要创建新的坐标系来进行插值。没有一种正确的方法可以做到这一点。我下面所用的方法是可行的,但是“最好”的方法在很大程度上取决于你的数据实际代表了什么。
(换言之,使用您对数据所测量的系统的了解来决定如何执行。对于插值,这始终为真!除非您知道结果应该是什么样的,并且对插值算法已经足够熟悉,可以利用这一先验信息来达到您的目的,否则您不应该进行插值!!也有比网格数据默认使用的Delaunay三角剖分更灵活的插值算法,但是对于一个简单的例子来说,这很好…)
无论如何,一种方法是重新调整x和y坐标,使它们的范围大致相同。在这种情况下。我们将从0重新缩放到1。。。(请原谅意大利面字符串代码。。。我只是想以身作则……)
希望这有帮助,无论如何。。。对不起,回答的时间太长了!
相关问题 更多 >
编程相关推荐