在2d numpy数组中复制边框

时间:2011-04-11 16:21:01

标签: python numpy

我正在尝试复制2d numpy数组的边框:

>>> from numpy import *
>>> test = array(range(9)).reshape(3,3)
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

是否有一种简单的方法可以在任何方向复制边框?

例如:

>>>> replicate(test, idx=0, axis=0, n=3) 
array([[0, 1, 2],
       [0, 1, 2],
       [0, 1, 2],
       [0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

修改

以下功能完成了这项工作:

def replicate(a, xy, se, n):
    rptIdx = numpy.ones(a.shape[0 if xy == 'X' else 1], dtype=int)
    rptIdx[0 if se == 'start' else -1] = n + 1
    return numpy.repeat(a, rptIdx, axis=0 if xy == 'X' else 1)

在['X','Y']中加入xy,在['start','end']中加入

1 个答案:

答案 0 :(得分:2)

您可以使用np.repeat

In [5]: np.repeat(test, [4, 1, 1], axis=0)
Out[5]: 
array([[0, 1, 2],
       [0, 1, 2],
       [0, 1, 2],
       [0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

但对于较大/变量数组,定义重复参数([4, 1, 1]将更加困难,在这种情况下,您希望重复每一行多少次。)