тиражирование границ в двумерных массивах - PullRequest
1 голос
/ 11 апреля 2011

Я пытаюсь скопировать границу двумерного массива:

>>> 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]])

edit :

выполнялась следующая функция:

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)

с xy в ['X', 'Y'] и seв ['начало', 'конец']

1 Ответ

2 голосов
/ 11 апреля 2011

Вы можете использовать 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], что в данном случае сколько раз вы хотитеповторять каждый ряд).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...