Numpy - Regrid with Averaging redux

时间:2013-05-08 16:01:34

标签: python numpy average weighted-average

我正在尝试实现类似于this post中回答的关于在python中重新编译的内容。该帖子中的问题涉及重新排列一个数组,使得输出单元格将包含所有输入单元格的平均值。问题在于,每个输入单元(我认为)只对一个输出单元有贡献 - 也就是说,没有真正的方法可以解释输入单元与两个输出单元重叠的情况。

我想知道是否有一种方法来推广该方法以解决单元格重叠 - 例如,如果我有两个输入区间,范围从0到1和1到2以及输出单元格跨越0.75到2 ,我想采取某种加权平均值来计算输出单元中的值,该输出单元识别跨越1到2的输入单元应该比输出单元大约多出4倍,而不是跨越0到1的输入单元。

这本身并不是插值,但几乎所有我尝试做类似事情的方法都使用它。使用例如np.interp进行直接向上插值的问题是,如果多个输入单元对输出单元有贡献,则此例程会忽略某些点。

1 个答案:

答案 0 :(得分:0)

我不太确定你在寻找什么,但我现在正在研究类似的东西。我有两个统一的有限差分网格,我需要将信息从一个映射到另一个,然后再返回。此代码符合我的需求。这个函数x_to_x创建一个矩阵M,这样我就可以得到M的点积和网格a上的数据,并在网格b上产生数据。

def x_to_x(xa, da, xb, db):
    a = np.tile(xa, (np.size(xb), 1))
    b = np.tile(xb, (np.size(xa), 1)).T
    a_l = a - da / 2
    a_r = a + da / 2
    b_l = b - db / 2
    b_r = b + db / 2
    x_l = np.maximum(a_l, b_l)
    x_r = np.minimum(a_r, b_r)
    return np.maximum(x_r - x_l, 0.) / db

如果你有一个非均匀的网格,da和db可以从标量改编成类似于da = np.hstack(a[1:] - a[:-1], a[-1] - a[-2])的东西。