2011-04-11 68 views
1

我試圖複製一個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']和SE XY在['start','end'中]

回答

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],這是在這種情況下,你要多少次重複每一行)。

+0

謝謝。我想我可以用'ones_like'和'repeat'來得到我想要的。 – Simon 2011-04-11 16:51:48