【问题标题】:How can I make a padded numpy array using the first/last row/column as the pad?如何使用第一行/最后一行/列作为填充来制作填充的 numpy 数组?
【发布时间】:2023-03-28 07:35:02
【问题描述】:

我需要在所有 4 个边上有效地填充一个 numpy 数组,使用第一行和最后一行/列作为填充数据。例如,给定以下内容:

A=np.array([[1    2   3   4],
            [5    6   7   8],
            [9   10  11  12]])

我想最终得到:

B=np.array([[1    1    2    3    4    4],
            [1    1    2    3    4    4],
            [5    5    6    7    8    8],
            [9    9   10   11   12   12],
            [9    9   10   11   12   12]])

注意原始数组 A 位于:B[1:-1,1:-1]。我假设我可以先在一个方向(水平或垂直)而不是另一个方向上填充,以获得重复的角值。但是,我的矢量化/数字化让我失望了。 (注意:我正在使用的数组非常大,我需要多次执行此选项,因此有效地执行此操作是关键——我可以使用循环来执行此操作,但速度很慢)。

【问题讨论】:

    标签: python arrays numpy vectorization


    【解决方案1】:

    使用np.pad,您可以指定填充的宽度和应用于数组的填充模式。对于您的示例数组,edge 填充模式可提供所需的结果:

    >>> np.pad(A, 1, 'edge')
    array([[ 1,  1,  2,  3,  4,  4],
           [ 1,  1,  2,  3,  4,  4],
           [ 5,  5,  6,  7,  8,  8],
           [ 9,  9, 10, 11, 12, 12],
           [ 9,  9, 10, 11, 12, 12]])
    

    【讨论】:

    • 哇,好方便。我在运行 numpy 1.6 时没有看到它,并且 .pad 直到 1.7 才添加。现在更新。编辑和.. 就像一个魅力。
    • 深入了解np.pad 代码表明它为每个维度使用了 2 个连接 - 一个 _preappend 和一个 _append
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 2013-06-02
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多