import numpy as np
numpy 데이터형태 종류
numpy 제공 데이터 타입 이해하기
- 파이썬 기본 제공 데이터타입 : int, float, string, bool - 단수 // list, tuple, dic, set - 복수
- numpy : ndarray(다차원배열)
- 기존 파이썬이 가질 수 있는 데이터 처리 크기보다 더 큰 데이터를 정리 할 수 있는 자료구조
numpy 배열의 특징
- 동일한 자료형을 가지는 값들이 배열 형태로 존재
- n차원 형태로 구성 가능
- data에 접근하기 위한 index(색인) 존재
numpy 배열 다루기
- 1차원 배열 생성
np.array([1, 2, 3, 4, 5])
출력값 : array([1,2,3,4,5])
list = [1, 2, 3, 4, 5]
arr1 = np.array(list)
arr1
출력값 : array([1,2,3,4,5])
리스트에 값을 넣어서 출력할수있음
list + 1 >> 오류
arr1 + 1 >> 가능
arr2 = np.array([[1, 2, 3, 4, 5],[5, 6, 7, 8, 9]])
arr2
출력값 : array([[1, 2, 3, 4, 5],
[5, 6, 7, 8, 9]])
줄바꿈 형태로 출력됨
2차원 배열의 정보 출력하기
print("배열의 크기(행,열) : ",arr2.shape) print("배열의 요소 갯수 : ",arr2.size) print("배열의 차원 수 : ",arr2.ndim) print("배열의 데이터 타입 : ",arr2.dtype)출력값 :
배열의 크기(행,열) : (2, 5)
배열의 요소 갯수 : 10
배열의 차원 수 : 2
배열의 데이터 타입 : int32
배열을 생성하는 다양한 함수들
1 ~ 50 들어있는 1차원 배열 생성
arr3 = np.arange(1, 51, 1)
arr3
출력값 :
array([ 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])
arr3 > 2차원(5행10열) 변환
arr3.reshape(5,10)출력값 :
array([[ 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]])
실습) 이미지 데이터 불러와서 정보 확인하기
- openCV 라이브러리 활용하기
!pip install opencv-python

import cv2
import matplotlib.pyplot as plt
1. 이미지 경로 불러오기
img = cv2.imread('./data/jang.jpg', cv2.IMREAD_COLOR) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(img)

img.ndim
행, 열, 채널(RGB)
img.shape
흰색의 경우 (255, 255, 255)r g b
img
출력값 :
array([[[235, 232, 241],
[235, 232, 241],
[235, 232, 241],
...,
[236, 233, 240],
[236, 233, 240],
[236, 233, 240]],
[[235, 232, 241],
[235, 232, 241],
[235, 232, 241],
...,
[236, 233, 240],
[236, 233, 240],
[236, 233, 240]],
[[235, 232, 241],
[235, 232, 241],
[235, 232, 241],
...,
[236, 233, 240],
[236, 233, 240],
[236, 233, 240]],
...,
...
[ 32, 28, 55],
...,
[253, 242, 236],
[253, 242, 236],
[249, 240, 233]]], dtype=uint8)
회색톤 이미지로 변환
img = cv2.imread('./data/jang.jpg', cv2.IMREAD_COLOR)
기본적으로 컴퓨터 기본 3원색은 rgb but, cv2의 경우 bgr
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
bgr > gray 변경
plt.imshow(img, cmap='gray')

gray 처리를 해 흑백 뿐이니 2차원
img.ndim
Numpy 데이터 접근
- indexing ; slicing 이용하여 인덱스 기반 접근
- boolean indexing : 논리연산자 이용 Ture 위치 데이터에 접근 가능
arr4 10, 20, 30 40, 50, 60 만들기
arr4 = np.arange(10, 61, 10) arr4
arr4에 있는 40에 접근
arr4[3]
arr4에 있는 40, 60에 접근
arr4[3],arr4[5] arr4[[3, 5]] <- 파이썬에서는 여러 개를 동시에 입력 할 때 포장(packing) arr4[3,5] <- 이렇게 작성하면 컴마 앞은 행, 컴마 뒤는 열이라 인식 오류뜸
10 ~ 30 슬라이싱
arr4[:3]출력값 : array([10, 20, 30])
10 30 50 출력 (slicing 이용)
arr4[0::2] # [시작 인덱스 넘버 : 끝 인덱스 넘버 : 증가량]출력값 array([10, 30, 50])
2행 3열
arr4 = arr4.reshape(2,3) arr4출력값 :
array([[10, 20, 30],
[40, 50, 60]])
20에 접근
arr4[0,1] # 이것만 기억
50, 60 출력
arr4[1,1:]출력값 : array([50, 60])
1부터 50까지 들어있는 배열 (5행 10열)
arr5 = np.arange(1, 51, 1).reshape(5,10) arr5출력값 :
array([[ 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]])
##실습
arr5[ : , [0, 3, 6, 9]]
출력값 :
array([[ 1, 4, 7, 10],
[11, 14, 17, 20],
[21, 24, 27, 30],
[31, 34, 37, 40],
[41, 44, 47, 50]])
arr5[ : , : : 3]
출력값 :
array([[ 1, 4, 7, 10],
[11, 14, 17, 20],
[21, 24, 27, 30],
[31, 34, 37, 40],
[41, 44, 47, 50]])
- 조건에 맞는 데이터 접근하기(불리언 인덱싱)
참 거짓이 랜덤하게 10개의 데이터가 들어있는 배열
np.random.seed(1) # 난수 생성기의 초기값(seed) 설정 > 재현성 확보 bool_arr = np.random.choice([True, False], size = 10) temp_arr = np.arange(10) bool_arr출력값 : array([False, False, True, True, False, False, False, False, False, True])
temp_arr[bool_arr]
출력값 :
array([2, 3, 9])
40 ~ 100 사이 랜덤 정수 10개
np.random.seed(18) # 난수 생성기의 초기값(seed) 설정 > 재현성 확보
score_arr = np.random.randint(40, 100, size = 10)
# 번호 생성
num_arr = np.arange(1,11)
score_arr
출력값 :
array([82, 59, 96, 45, 89, 86, 90, 42, 48, 64])
75이상의 수 위치 넘버 확인
num_arr[score_arr >= 75]
출력값 :
array([1, 3, 5, 6, 7])
이미지의 얼굴에 접근 하기 > use
slicing plt.imshow(img, cmap='gray') plt.show()

이미지의 얼굴에 접근 하기 > use
slicing
plt.imshow(img[200:600, 180:600], cmap='gray')
plt.show()

이미지의 얼굴에 접근 하기 > use
slicing
plt.imshow(img[60:650, 100:640], cmap='gray')
plt.show()
