raster_average.py 文件源码

python
阅读 30 收藏 0 点赞 0 评论 0

项目:uncover-ml 作者: GeoscienceAustralia 项目源码 文件源码
def filter_uniform_filter(data, size=3, no_data_val=None,
                          func=np.nanmean):
    """
    Parameters
    ----------
    A = input data
    size = odd number uniform filtering kernel size
    no_data_val = value in matrix that is treated as no data value

    Returns: nanmean of the matrix A filtered by a uniform kernel of size=size
    -------
    Adapted from: http://stackoverflow.com/questions/23829097/python-numpy-fastest-method-for-2d-kernel-rank-filtering-on-masked-arrays-and-o?rq=1

    Notes:
    This is equivalent to scipy.ndimage.uniform_filter, but can handle nan's,
    and can use numpy nanmean/median/max/min functions.

    no_data_val/nan handling can be found in filter_broadcast_uniform_filter in
    this module.

    Change function to nanmeadian, nanmax, nanmin as required.
    """

    assert size % 2 == 1, 'Please supply an odd size'
    rows, cols = data.shape

    padded_A = np.empty(shape=(rows + size-1,
                               cols + size-1),
                        dtype=data.dtype)
    padded_A[:] = np.nan
    rows_pad, cols_pad = padded_A.shape

    if no_data_val:
        mask = data == no_data_val
        data[mask] = np.nan

    padded_A[size-1: rows_pad, size - 1: cols_pad] = data.copy()

    n, m = data.shape
    strided_data = as_strided(padded_A, (n, m, size, size),
                              padded_A.strides+padded_A.strides)
    strided_data = strided_data.copy().reshape((n, m, size**2))

    return func(strided_data, axis=2)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号