문제
사용 Numpy, 행렬 A에는 N 행과 M 열이 있으며 매트릭스 A에 가드 링을 추가하고 싶습니다. 그 가드 링은 모두 0입니다.
어떻게해야합니까? Reshape를 사용 하시겠습니까? 그러나 요소는 n+1 m+1 행렬을 만들기에 충분하지 않습니다.
또는 등?
미리 감사드립니다
나는 항상 0 서라운드 매트릭스를 포함하는 셀의 여분의 고리를 의미합니다. 매트릭스 A와 동일합니다.해결책
당신의 후속 논평:
>>> 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