【问题标题】:Is there a function to add a buffer of (NaN) values around a NumPy ndarray?是否有一个函数可以在 NumPy ndarray 周围添加(NaN)值的缓冲区?
【发布时间】:2021-11-24 19:30:14
【问题描述】:

我正在处理土地利用类别的专题栅格。目标是将栅格拆分为给定大小的较小图块。例如,我有一个 1490 像素的栅格,我想将其拆分为 250x250 像素的图块。为了获得相同大小的图块,我想将光栅的宽度增加到 1500 像素以恰好适合 6 个图块。为此,我需要将栅格的大小增加 10 个像素。

我目前正在使用rasterio 库打开栅格,该库返回一个 NumPy ndarray。是否有在此数组周围添加缓冲区的功能?目标是这样的:

import numpy as np

a = np.array([
    [1,4,5],
    [4,5,5],
    [1,2,2]
])

a_with_buffer = a.buffer(a, 1) # 2nd argument refers to the buffer size

那么a_with_buffer 将如下所示:

[0,0,0,0,0]
[0,1,4,5,0],
[0,4,5,5,0],
[0,1,2,2,0],
[0,0,0,0,0]

【问题讨论】:

    标签: python numpy raster numpy-ndarray


    【解决方案1】:

    你可以使用np.pad:

    >>> np.pad(a, 1)
    array([[0, 0, 0, 0, 0],
           [0, 1, 4, 5, 0],
           [0, 4, 5, 5, 0],
           [0, 1, 2, 2, 0],
           [0, 0, 0, 0, 0]])
    

    【讨论】:

    • 完美,正是我想要的!
    • 是否可以将填充宽度和高度设置为不同的值?我在文档中找不到它。
    • @Sytze 当然,可以为每个维度提供一个 2 元组,指定左右填充:[(l1, r1), (l2, r2)]。它在参数pad_width的文档中提到。
    【解决方案2】:

    您可以创建np.zeros,然后在索引中插入您想要的a,如下所示。

    试试这个:

    >>> a = np.array([[1,4,5],[4,5,5],[1,2,2]])
    
    >>> b = np.zeros((5,5))
    
    >>> b[1:1+a.shape[0],1:1+a.shape[1]] = a
    
    >>> b
    array([[0., 0., 0., 0., 0.],
           [0., 1., 4., 5., 0.],
           [0., 4., 5., 5., 0.],
           [0., 1., 2., 2., 0.],
           [0., 0., 0., 0., 0.]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      相关资源
      最近更新 更多