- NumPy는 행렬이나 일반적으로 대규모 다차원 배열을 쉽게 처리할 수 있도록 지원하는 파이썬의 라이브러리이다.
- NumPy는 데이터 구조 외에도 수치 계산을 위해 효율적으로 구현된 기능을 제공한다.
import numpy as np
numpy를 불러 오겠다는 의미이고 as의 의미는 앞으로 numpy를 줄여 np로도 사용이 가능하다는 것이다.
list = [1, 2, 3] array = np.array(list)
List타입의 변수를 np.array의 형태로 바꾸어준다.
# arange함수는 첫 번째 인자부터 두 번째 인자 전까지 # 세 번째 인자 만큼의 간격만큼 범위안의 값들을 넣는다. # np.arange함수는 정수를 넣는다. np.arange(0, 10, 2)
💻 결과
array([0, 2, 4, 6, 8])
0부터 10까지 간격이 2만큼 값이 증가하며 배열에 저장된다.
여기서 arange함수의 두 번째 인자인 10은 포함이 되는 것이 아니고 전까지이다.
# np.zeros함수는 실수를 넣는다. # shape는 모양을 나타낸다(10개의 행, 5개의 열) np.zeros(shape=(10, 5))
💻 결과
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.], [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.]])
np.zeros함수는 모양을 입력하면 해당하는 행과 열의 크기만큼 배열이 만들어지고 값은 모두 0으로 만들어진다.
이렇게 만들어진 배열은 모두 실수형 타입이다.
# shape는 안써도 됨 np.ones((2,4))
💻 결과
array([[1., 1., 1., 1.], [1., 1., 1., 1.]])
np.zeros와 비슷한 함수인데 이 함수는 값을 모두 1로 만들어준다.
list = [95, 11, 81, 70, 63, 87, 75, 9, 77, 40] array = np.array(list) array.max() # 95 array.argmax() # 0 array.min() # 9 array.argmin() # 7 array.mean() # 60.8
💻 결과
95 0 9 7 60.8
max함수를 사용하게 되면 가장 큰 값을 리턴해준다. argmax함수는 가장 큰 값의 인덱스 번호를 리턴해준다.
min과 argmin의 함수는 max함수와 비슷하게 가장 작은 값, 그에 해당하는 인덱스를 리턴해준다.
평균을 구하고 싶다면 mean함수를 사용하면 된다.
array = np.arange(0,100).reshape(10, 10) ''' array([[ 0, 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, 31, 32, 33, 34, 35, 36, 37, 38, 39], [40, 41, 42, 43, 44, 45, 46, 47, 48, 49], [50, 51, 52, 53, 54, 55, 56, 57, 58, 59], [60, 61, 62, 63, 64, 65, 66, 67, 68, 69], [70, 71, 72, 73, 74, 75, 76, 77, 78, 79], [80, 81, 82, 83, 84, 85, 86, 87, 88, 89], [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]) ''' array[:, 1] array[:, 1].reshape(10, 1) array[0:3, 0:5]
💻 결과
array([ 1, 11, 21, 31, 41, 51, 61, 71, 81, 91]) array([[ 1], [11], [21], [31], [41], [51], [61], [71], [81], [91]]) array([[ 0, 1, 2, 3, 4], [10, 11, 12, 13, 14], [20, 21, 22, 23, 24]])
mat[ : , 1]의 의미는 모든 행 그리고 1번째 열을 가져오는 것이다.
reshape함수는 배열의 모양을 바꾸어 주는데, 총 크기가 변하면 안된다. 위의 mat[ : , 1]의 크기는 10이어서 (1, 10), (2, 5)등의 크기로만 바꿀수 있다.
import numpy as np import matplotlib.pyplot as plt from PIL import Image # 이미지를 열수 있게 해주는 이미지 기능 (JPEG, PNG) # 이 이미지를 numpy가 이해할 수 있는 배열로 바꿀 수 있다.
pic = Image.open('YOUR IMAGE DIRECTION') type(pic)
💻 결과
PIL.JpegImagePlugin.JpegImageFile
위의 파일은 JPEG이미지이므로 이 파일은 numpy가 다룰 수 없다.
pic_arr = np.asarray(pic) type(pic_arr)
💻 결과
numpy.ndarray
위의 코드를 이용하면 numpy의 배열로 바꾸어 준다.
# 이 배열을 하나의 이미지로 나타낼 수 있게 해준다. # plt.imshow의 함수는 배열로 바뀐 이미지들을 보여주기 위해 특수 기능이다. plt.imshow(pic_arr)
💻 결과
# 흑백 화면으로 출력 # 흰색에 가까울수록 해당하는 색이 많이 쓰였다 # 귀 부분을 보면 다른 사진에 비해 조금 더 하얀데 # 위의 풀 컬러의 사진을 보면 진짜 귀가 붉은 색을 띈다. pic_red = pic_arr.copy() plt.imshow(pic_red[:, :, 0], cmap='gray')
💻 결과
위의 copy함수는 해당 배열을 복사하는 함수이다.
pic_red[ : , : , 0]는 빨간 채널을 가져온다.
cmap='gray'를 입력해야지 흑백으로 사진이 나온다.