일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- dataframe
- array
- 파이썬
- list
- google apps script
- PANDAS
- numpy
- Github
- Python
- PostgreSQL
- string
- Excel
- Google Excel
- SQL
- c#
- Mac
- Kotlin
- PySpark
- django
- Redshift
- math
- Google Spreadsheet
- Tkinter
- gas
- Java
- Apache
- GIT
- matplotlib
- hive
- Today
- Total
달나라 노트
Python numpy : pad (array 테두리 데이터 추가. array 테두리 추가) 본문
Python numpy : pad (array 테두리 데이터 추가. array 테두리 추가)
CosmosProject 2022. 3. 22. 18:53
numpy의 pad method는 대상 array의 테두리에 특정 데이터를 추가해줍니다.
Syntax
numpy.pad(array,
pad_width=((a, b), (c, d)),
mode='constant',
constant_values=0
)
array = pad method를 적용할 대상이 될 array입니다.
pad_width = 데이터를 추가해서 테두리를 몇줄이나 만들지를 지정하는 부분입니다.
a -> 위쪽 행 추가 개수
b -> 아래쪽 행 추가 개수
c -> 왼쪽 열 추가 개수
d -> 오른쪽 열 추가 개수
mode = pad method를 적용하는 mode를 지정합니다. 기본값은 constant입니다.
mode='constant' -> 특정한 값으로 테두리를 추가함.
mode='edge' -> 원본 array에서 가장 가까운 모서리(edge)에 있는 값으로 테두리 데이터를 추가함.
mode='maximum' -> 특정 테두리 위치에 존재하는 값에서 행/열에 있는 최대값으로 테두리 데이터를 추가함.
constant_values = 테두리에 채워넣을 상수값을 의미합니다. 기본값은 0입니다.
import numpy as np
arr_test = np.array(
[
[9, 1, 5, 7],
[2, 6, 5, 8],
[0, 3, 0, 2],
[4, 0, 7, 3]
]
)
print(arr_test)
arr_test_padded = np.pad(arr_test, pad_width=((1, 1), (1, 1)), mode='constant', constant_values=0)
print(arr_test_padded)
-- Result
[[9 1 5 7]
[2 6 5 8]
[0 3 0 2]
[4 0 7 3]]
[[0 0 0 0 0 0]
[0 9 1 5 7 0]
[0 2 6 5 8 0]
[0 0 3 0 2 0]
[0 4 0 7 3 0]
[0 0 0 0 0 0]]
2차원 array를 생성했고 pad method를 적용하였습니다.
결과를 보면 원본 array의 주위로 0이라는 숫자가 채워져서 마치 2차원 array를 둘러싸는 테두리가 생긴걸 볼 수 있습니다.
아래는 pad_width 옵션을 조절한 예시들입니다.
pad_width 옵션에서 변화되는 값과 결과를 비교해서 pad_width옵션이 적용되는 위치를 중점적으로 보면 이해하기 쉽습니다.
import numpy as np
arr_test = np.array(
[
[9, 1, 5, 7],
[2, 6, 5, 8],
[0, 3, 0, 2],
[4, 0, 7, 3]
]
)
print(arr_test)
arr_test_padded = np.pad(arr_test, pad_width=((3, 1), (1, 1)), mode='constant', constant_values=0)
print(arr_test_padded)
-- Result
[[9 1 5 7]
[2 6 5 8]
[0 3 0 2]
[4 0 7 3]]
[[0 0 0 0 0 0]
[0 0 0 0 0 0]
[0 0 0 0 0 0]
[0 9 1 5 7 0]
[0 2 6 5 8 0]
[0 0 3 0 2 0]
[0 4 0 7 3 0]
[0 0 0 0 0 0]]
pad_width 값을 조절해서 위쪽에만 3줄의 padding을 추가한 결과입니다.
import numpy as np
arr_test = np.array(
[
[9, 1, 5, 7],
[2, 6, 5, 8],
[0, 3, 0, 2],
[4, 0, 7, 3]
]
)
print(arr_test)
arr_test_padded = np.pad(arr_test, pad_width=((1, 3), (1, 1)), mode='constant', constant_values=0)
print(arr_test_padded)
-- Result
[[9 1 5 7]
[2 6 5 8]
[0 3 0 2]
[4 0 7 3]]
[[0 0 0 0 0 0]
[0 9 1 5 7 0]
[0 2 6 5 8 0]
[0 0 3 0 2 0]
[0 4 0 7 3 0]
[0 0 0 0 0 0]
[0 0 0 0 0 0]
[0 0 0 0 0 0]]
pad_width 값을 조절해서 아래쪽에만 3줄의 padding을 추가한 결과입니다.
import numpy as np
arr_test = np.array(
[
[9, 1, 5, 7],
[2, 6, 5, 8],
[0, 3, 0, 2],
[4, 0, 7, 3]
]
)
print(arr_test)
arr_test_padded = np.pad(arr_test, pad_width=((1, 1), (3, 1)), mode='constant', constant_values=0)
print(arr_test_padded)
-- Result
[[9 1 5 7]
[2 6 5 8]
[0 3 0 2]
[4 0 7 3]]
[[0 0 0 0 0 0 0 0]
[0 0 0 9 1 5 7 0]
[0 0 0 2 6 5 8 0]
[0 0 0 0 3 0 2 0]
[0 0 0 4 0 7 3 0]
[0 0 0 0 0 0 0 0]]
pad_width 값을 조절해서 왼쪽에만 3줄의 padding을 추가한 결과입니다.
import numpy as np
arr_test = np.array(
[
[9, 1, 5, 7],
[2, 6, 5, 8],
[0, 3, 0, 2],
[4, 0, 7, 3]
]
)
print(arr_test)
arr_test_padded = np.pad(arr_test, pad_width=((1, 1), (1, 3)), mode='constant', constant_values=0)
print(arr_test_padded)
-- Result
[[9 1 5 7]
[2 6 5 8]
[0 3 0 2]
[4 0 7 3]]
[[0 0 0 0 0 0 0 0]
[0 9 1 5 7 0 0 0]
[0 2 6 5 8 0 0 0]
[0 0 3 0 2 0 0 0]
[0 4 0 7 3 0 0 0]
[0 0 0 0 0 0 0 0]]
pad_width 값을 조절해서 오른쪽에만 3줄의 padding을 추가한 결과입니다.
import numpy as np
arr_test = np.array(
[
[9, 1, 5, 7],
[2, 6, 5, 8],
[0, 3, 0, 2],
[4, 0, 7, 3]
]
)
print(arr_test)
arr_test_padded = np.pad(arr_test, pad_width=((1, 1), (0, 1)), mode='constant', constant_values=0)
print(arr_test_padded)
-- Result
[[9 1 5 7]
[2 6 5 8]
[0 3 0 2]
[4 0 7 3]]
[[0 0 0 0 0]
[9 1 5 7 0]
[2 6 5 8 0]
[0 3 0 2 0]
[4 0 7 3 0]
[0 0 0 0 0]]
pad_width 값을 조절해서 왼쪽에는 padding을 추가하지 않은 결과입니다.
import numpy as np
arr_test = np.array(
[
[9, 1, 5, 7],
[2, 6, 5, 8],
[0, 3, 0, 2],
[4, 0, 7, 3]
]
)
print(arr_test)
arr_test_padded = np.pad(arr_test, pad_width=((1, 1), (1, 1)), mode='constant', constant_values=10)
print(arr_test_padded)
-- Result
[[10 10 10 10 10 10]
[10 9 1 5 7 10]
[10 2 6 5 8 10]
[10 0 3 0 2 10]
[10 4 0 7 3 10]
[10 10 10 10 10 10]]
constant_values 값을 10으로 변경한 결과입니다.
테두리의 값이 10으로 채워진 것을 볼 수 있습니다.
import numpy as np
arr_test = np.array(
[
[9, 1, 5, 7],
[2, 6, 5, 8],
[0, 3, 0, 2],
[4, 0, 7, 3]
]
)
print(arr_test)
arr_test_padded = np.pad(arr_test, pad_width=((1, 1), (1, 1)), mode='edge')
print(arr_test_padded)
-- Result
[[9 1 5 7]
[2 6 5 8]
[0 3 0 2]
[4 0 7 3]]
[[9 9 1 5 7 7]
[9 9 1 5 7 7]
[2 2 6 5 8 8]
[0 0 3 0 2 2]
[4 4 0 7 3 3]
[4 4 0 7 3 3]]
mode 옵션을 edge로 설정했습니다.
값이 채워져야하는 모서리의 위치 기준으로 가장 가까운 원본 행렬의 모서리(edge)에 있는 값으로 padding을 채웁니다.
import numpy as np
arr_test = np.array(
[
[9, 1, 5, 7],
[2, 6, 5, 8],
[0, 3, 0, 2],
[4, 0, 7, 3]
]
)
print(arr_test)
arr_test_padded = np.pad(arr_test, pad_width=((1, 1), (1, 1)), mode='maximum')
print(arr_test_padded)
-- Result
[[9 1 5 7]
[2 6 5 8]
[0 3 0 2]
[4 0 7 3]]
[[9 9 6 7 8 9]
[9 9 1 5 7 9]
[8 2 6 5 8 8]
[3 0 3 0 2 3]
[7 4 0 7 3 7]
[9 9 6 7 8 9]]
mode 옵션을 maximum으로 설정했습니다.
값이 채워져야하는 모서리의 위치 기준으로 동일한 행 또는 열에 있는 값 중 가장 큰 값으로 padding을 채웁니다.
'Python > Python numpy' 카테고리의 다른 글
Python numpy : clip (최대/최소값 제한하기) (0) | 2022.03.22 |
---|---|
Python numpy : zeros_like (같은 크기의 0으로 채워진 행렬 생성, 같은 크기의 행렬 생성) (0) | 2022.03.22 |
Python numpy : array indexing (0) | 2022.03.22 |
Python numpy : 행렬 연산 (+, -, *, /, @, 행렬의 곱) (0) | 2022.03.13 |
Python numpy : T (전치 행렬, Transpose) (2) | 2022.03.13 |