문제

사용 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]])
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top