如何用numpy计算数组中最近邻居的平均值



给定一个以实数为项的任意数组,我想返回一个形状相同的数组,其项是原始数组最近邻居的平均值。

在给定维度为2的数组的情况下,我的意思是,如果数组的形状(n,m(有条目a_{I,j},那么在条目(I,j(上,新数组的值应该是:

平均值(i,j(=1/4(a_{i+1,j}+a_{i-1,j}+Au{i,j+1}+a_{i,j-1}(,

其中第一个索引取mod n,第二个取mod m。

我想创建一个函数,它的自变量是一个任意数组,并返回一个相同形状的数组和给定数组的最近邻居上的条目的平均值(对于d维数组,有2d个最近邻居,通过对每个索引的+1和-1求和获得(

我知道如何对固定维度d(只是概括上面的等式(执行此操作,使用嵌套的d作为循环,但我不知道如何在维度不固定时执行此操作。

Scipy有一个Scipy.ndimage.covolve函数,它可以做到这一点。它使用数组和一个值矩阵来乘以邻居。它应该适用于任何数量的维度。

但是,如果您尝试手动编写此函数,我建议尝试迭代或递归方法,其中每个迭代或递归层都处理一个维度。在三维情况下,您将首先处理第一个维度,并具有该维度中邻居值的六分之一。下一次迭代将对维度2等执行相同操作。

由于每个条目在每个维度上都有2个邻居,因此要将每个邻居乘以的因子是1/(2n(。这应该扩展到任意数量的维度。

最新更新