Как добавить защитное кольцо к матрице в NumPy?
Вопрос
С использованием NumPy, матрица A имеет n строк и m столбцов, и я хочу добавить защитное кольцо к матрице A.В этом охранном кольце все ноль.
Что я должен делать?Использовать Изменить форму?Но этого элемента недостаточно, чтобы составить матрицу n+1 m+1.
Или и т. д.?
заранее спасибо
Я имею в виду дополнительное кольцо ячеек, которые всегда содержат 0 объемной матрицы A. По сути, есть матрица B, имеющая n + 2 строки m + 2 столбца, где первая строка и столбцы, а также последняя строка и столбцы равны нулю, а остальная часть равна нулю. то же, что и матрица А.Решение
Следя за вашим комментарий:
>>> 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]])
Другие советы
Это менее общая, но более понятная версия Ответ Алекса:
>>> 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]])
Этот вопрос уже устарел, но я просто хочу предупредить людей, которые его нашли. 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]])
Не связан с StackOverflow