Как добавить защитное кольцо в матрицу в NumPy? - PullRequest
2 голосов
/ 12 декабря 2008

Используя NumPy , матрица A имеет n строк и m столбцов, и я хочу добавить защитное кольцо в матрицу A. Это защитное кольцо - все ноль.

Что мне делать? Использовать Reshape? Но элемента недостаточно, чтобы составить матрицу n + 1 m + 1.

или др .?

Заранее спасибо

Я имею в виду дополнительное кольцо ячеек, которые всегда содержат 0 окружающих матриц А. В основном, есть Матрица В, имеющая n + 2 строки m + 2 столбца, где первая строка и столбцы, а последняя строка и столбцы равны нулю, а остальные такой же, как матрица А.

Ответы [ 3 ]

6 голосов
/ 12 декабря 2008

Комментарий к вашему комментарию :

>>> import numpy
>>> a = numpy.array(range(9)).reshape((3,3))
>>> b = numpy.zeros(tuple(s+2 for s in a.shape), a.dtype)
>>> b[tuple(slice(1,-1) for s in a.shape)] = a
>>> b
array([[0, 0, 0, 0, 0],
       [0, 0, 1, 2, 0],
       [0, 3, 4, 5, 0],
       [0, 6, 7, 8, 0],
       [0, 0, 0, 0, 0]])
5 голосов
/ 14 декабря 2008

Это менее общая, но более понятная версия Ответ Алекса :

>>> a = numpy.array(range(9)).reshape((3,3))
>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> b = numpy.zeros(a.shape + numpy.array(2), a.dtype)
>>> b
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])
>>> b[1:-1,1:-1] = a
>>> b
array([[0, 0, 0, 0, 0],
       [0, 0, 1, 2, 0],
       [0, 3, 4, 5, 0],
       [0, 6, 7, 8, 0],
       [0, 0, 0, 0, 0]])
1 голос
/ 11 мая 2017

Этот вопрос сейчас древний, но я просто хочу предупредить людей, обнаружив, что numpy имеет функцию pad, которая очень легко выполняет это сейчас.

import numpy as np
a = np.array(range(9)).reshape((3, 3))
a
Out[15]: 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

a = np.pad(a, pad_width=((1,1),(1,1)), mode='constant', constant_values=0)
a
Out[16]: 
array([[0, 0, 0, 0, 0],
       [0, 0, 1, 2, 0],
       [0, 3, 4, 5, 0],
       [0, 6, 7, 8, 0],
       [0, 0, 0, 0, 0]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...