# random 모듈을 임포트하여 난수 생성 기능을 사용할 수 있게 합니다.
import random
# 2차원 리스트의 크기를 정의하는 SIZE 변수입니다. 여기서는 5로 설정하였습니다.
SIZE = 5
# 2차원 리스트를 생성합니다. 이때 리스트의 각 요소는 0부터 100 사이의 난수로 초기화됩니다.
# 리스트 내포(list comprehension)를 사용하여 간결하게 표현하였습니다.
pythonList = [[random.randint(0, 100) for i in range(SIZE)] for j in range(SIZE)]
# 생성된 2차원 리스트의 요소를 출력합니다.
for i in range(SIZE):
for k in range(SIZE):
# 각 요소를 3자리 정수 형태로 출력하며, 각 요소 사이는 공백으로 구분됩니다.
print("%3d" % pythonList[i][k], end=' ')
# 각 행이 끝날 때마다 새로운 줄로 이동합니다.
print()
# 리스트의 각 요소에 100을 더하는 작업을 수행합니다.
for i in range(SIZE):
for k in range(SIZE):
pythonList[i][k] += 100
# 수정된 2차원 리스트를 다시 출력합니다. 이번에는 각 요소에 100이 더해진 상태입니다.
for i in range(SIZE):
for k in range(SIZE):
print("%3d" % pythonList[i][k], end=' ')
print()
넘파이 개념
정수를 저장하기 위해 5*5 크기의 랜덤값으로 초기화된 2차원 리스트를 맏늘고, 리스트의 모든 값에 100을 더하는 코드
import numpy as np
## 넘파이 2차원 배열 생성
SIZE = 5
numpyAry = np.random.randint(0, 255, size=(SIZE, SIZE))
## 배열을 출력하기
print(numpyAry)
print()
## 배열에 100을 더하기
numpyAry += 100
## 배열을 출력하기
print(numpyAry)
위의 코드를 넘파이를 사용해서 줄인 것
파이썬이란 프로그램은 한줄이라도 덜 쓰기 위해서 안간힘을 쓰는 언어이므로 넘파이를 사용해서 간략하게 줄여버린 것.
넘파이 안에 랜덤도 있음!
import random
# 기본 설정: 원본 2차원 리스트의 크기, 새로운 리스트를 시작할 위치, 새로운 리스트의 크기
SIZE = 5 # 원본 2차원 리스트의 크기는 5x5입니다.
startRow, startCol = 1, 1 # 새로운 리스트를 추출할 시작 위치는 (1, 1)입니다.
nSIZE = 3 # 새로운 리스트의 크기는 3x3입니다.
# 파이썬으로 2차원 리스트를 생성합니다.
value = 1
myList1 = []
for _ in range(SIZE):
tmpList = [] # 임시 리스트를 만들어 각 행을 구성합니다.
for _ in range(SIZE):
tmpList.append(value) # 각 행에 1부터 순서대로 값을 추가합니다.
value += 1 # 다음 값으로 증가시킵니다.
myList1.append(tmpList) # 완성된 행을 원본 리스트에 추가합니다.
# 원본 2차원 리스트를 출력합니다.
for i in range(SIZE):
[print("%3d" % myList1[i][k], end=' ') for k in range(SIZE)]
print() # 각 행을 출력한 후에 줄바꿈을 합니다.
print()
# 파이썬 2차원 리스트를 슬라이싱하여 새로운 리스트를 만듭니다.
myList2 = []
for i in range(startRow, startRow + nSIZE):
tmpList = [] # 새로운 리스트를 위한 임시 행을 만듭니다.
for k in range(startCol, startCol + nSIZE):
tmpList.append(myList1[i][k]) # 지정된 위치부터 nSIZE 만큼 값을 임시 행에 추가합니다.
myList2.append(tmpList) # 완성된 임시 행을 새로운 리스트에 추가합니다.
# 새로운 2차원 리스트를 출력합니다.
for i in range(nSIZE):
[print("%3d" % myList2[i][k], end=' ') for k in range(nSIZE)]
print() # 각 행을 출력한 후에 줄바꿈을 합니다.
print()
import numpy as np # 넘파이 라이브러리를 np라는 이름으로 임포트합니다.
SIZE = 5 # 이미지(2차원 배열)의 크기를 5x5로 설정합니다.
## 넘파이로 2차원 배열 생성하기
# 0부터 254 사이의 난수로 5x5 크기의 배열을 생성합니다. 이 배열을 'imageAry'라고 합니다.
imageAry = np.random.randint(0, 255, size=(SIZE, SIZE))
print('### 1. 원본 ###') # 생성된 원본 배열을 출력합니다.
print(imageAry)
np.save('source', imageAry) # 'source.npy'라는 파일 이름으로 원본 배열을 저장합니다.
## (1) 모든 요소에 10을 더한 후 저장
imageAry += 10 # 배열의 모든 요소에 10을 더합니다.
print('### 2. 10 증가 ###') # 10을 더한 결과를 출력합니다.
print(imageAry)
np.save('result1', imageAry) # 'result1.npy'라는 파일 이름으로 결과를 저장합니다.
## (2) 흑백 처리 후 저장
# 배열의 요소가 128보다 작으면 0(검은색)으로, 그렇지 않으면 255(흰색)으로 변경합니다.
imageAry = np.where(imageAry < 128, 0, 255)
print('### 3. 흑백 처리 ###') # 흑백 처리한 결과를 출력합니다.
print(imageAry)
np.save('result2', imageAry) # 'result2.npy'라는 파일 이름으로 결과를 저장합니다.
## (3) 반전 처리 후 저장
# 배열의 요소를 255에서 현재 값으로 빼서 색상을 반전시킵니다.
imageAry = 255 - imageAry
print('### 4. 반전 처리 ###') # 반전 처리한 결과를 출력합니다.
print(imageAry)
np.save('result3', imageAry) # 'result3.npy'라는 파일 이름으로 결과를 저장합니다.
## 복구 1 ##
# 'result2.npy' 파일을 로드하여 배열을 복구합니다.
imageAry = np.load('result2.npy')
print('### 복구1 : result2.npy ###') # 복구한 배열을 출력합니다.
print(imageAry)
## 복구 2 ##
# 'result1.npy' 파일을 로드하여 배열을 복구합니다.
imageAry = np.load('result1.npy')
print('### 복구2 : result1.npy ###') # 복구한 배열을 출력합니다.
print(imageAry)
## 복구 3 ##
# 'source.npy' 파일을 로드하여 원본 배열을 복구합니다.
imageAry = np.load('source.npy')
print('### 복구3(원본) : source.npy ###') # 복구한 원본 배열을 출력합니다.
print(imageAry)
아래는 결과
### 1. 원본 ###
[[104 210 250 2 2]
[ 44 45 180 204 98]
[ 33 113 33 89 119]
[138 120 186 247 26]
[114 205 97 239 59]]
### 2. 10 증가 ###
[[114 220 260 12 12]
[ 54 55 190 214 108]
[ 43 123 43 99 129]
[148 130 196 257 36]
[124 215 107 249 69]]
### 3. 흑백 처리 ###
[[ 0 255 255 0 0]
[ 0 0 255 255 0]
[ 0 0 0 0 255]
[255 255 255 255 0]
[ 0 255 0 255 0]]
### 4. 반전 처리 ###
[[255 0 0 255 255]
[255 255 0 0 255]
[255 255 255 255 0]
[ 0 0 0 0 255]
[255 0 255 0 255]]
### 복구1 : result2.npy ###
[[ 0 255 255 0 0]
[ 0 0 255 255 0]
[ 0 0 0 0 255]
[255 255 255 255 0]
[ 0 255 0 255 0]]
### 복구2 : result1.npy ###
[[114 220 260 12 12]
[ 54 55 190 214 108]
[ 43 123 43 99 129]
[148 130 196 257 36]
[124 215 107 249 69]]
### 복구3(원본) : source.npy ###
[[104 210 250 2 2]
[ 44 45 180 204 98]
[ 33 113 33 89 119]
[138 120 186 247 26]
[114 205 97 239 59]]
넘파이를 이용하면 흑백처리, 반전처리 등을 편하게 할 수 있다는 것을 보여줌
그리고 save랑 load가 나왔는데 이걸 사용하면 편하게 저장하고 가져올 수 있다는 것을 알 수 있음
'공부 기록 > 파이썬' 카테고리의 다른 글
대영쓰 클래쓰 - Python [리스트, 딕셔너리, 함수] (1) | 2024.04.20 |
---|---|
파이썬 - 사용자 입력 받기 (0) | 2024.03.25 |
파이썬 - 정수와 실수 (0) | 2024.03.25 |
파이썬 - 따옴표와 문자열 (0) | 2024.03.25 |
2024.03.22. 파이썬 공부 (if, else, 함수) (1) | 2024.03.23 |