idl的rebin函数的python/numpy实现。
rebin的Python项目详细描述
idl的rebin函数的python/numpy实现。
见http://www.harrisgeospatial.com/docs/rebin.html。
此模块中定义的rebin函数首先将 指定大小的平铺中的输入数组。然后,一个约化函数 应用于每个平铺,由单个值替换。这个 返回结果数组:其维数是 输入数组。
Rebin是根据BSD 3条款许可证发布的。
基本原理
输入数组a被假定为spired。换句话说,如果
a.strides = (s0, s1, ...),
然后
a[i0, i1, ...] = a[[s0*i0 + s1*i1 + ...]],
其中[[...]]表示偏移运算符。计算输出 数组,我们首先创建a的平铺版本。数量 对于a中的每个索引,tiled的维数是a的两倍, tiled有一个slow索引和一个fast索引
tiled[i0, i1, ..., j0, j1, ...] = a[f0*i0 + j0, f1*i1 + j1, ...],
其中factor=(f0, f1, ...)是装箱因子( 瓷砖)。在使用a
tiled[i0, i1, ..., j0, j1, ...] = a[[s0*f0*i0 + s1*f1*i1 + ... + s0*j0 + s1*j1 + ...]],
这表明tiled的步伐是
tiled.strides = (s0*f0, s1*f1, ..., s0, s1, ...).
换句话说,tiled是a的视图 大步前进。使用^{tt14}可以重新限制数组$ 来自numpy.lib.stride_tricks的函数。然后,输出数组是 容易计算如下
out = func(tiled, axis = tuple(range(-a.ndim, 0)))
对快速指数进行缩减。
边界情况
当输入数组的维数不是 瓷砖的尺寸、重新绑定的行/列很简单 丢弃的。例如
+--------+--------+--------+--------+----+ | 1 1 | 2 2 | 3 3 | 4 4 | 5 | | 1 1 | 2 2 | 3 3 | 4 4 | 5 | +--------+--------+--------+--------+----+ | 6 6 | 7 7 | 8 8 | 9 9 | 10 | | 6 6 | 7 7 | 8 8 | 9 9 | 10 | +--------+--------+--------+--------+----+ | 11 11 | 12 12 | 13 13 | 14 14 | 15 | +--------+--------+--------+--------+----+
将产生
+----+----+----+----+ | 4 | 8 | 12 | 16 | +----+----+----+----+ | 24 | 28 | 32 | 36 | +----+----+----+----+
对于(2,2)个平铺和sum缩减。