행렬의 필요성
- 현실 세계의 많은 문제는 행렬(리스트)을 이용해 해결할 수 있습니다.
- axis 0(행), 1차원: 벡터
- axis 1(열), 2차원: 행렬
- axis 2(채널), 3차원: Tensor
행렬은 어디에 쓰이는가?
- 컴퓨터의 메모리 구조는 행렬 형태의 표현이 가능합니다.
- 표 형태, 이미지 데이터는 행렬로 표현할 수 있습니다.
Numpy란?
- 다차원 배열을 효과적으로 처리 가능
- 다양한 데이터는 배열로 나타낼 수 있음
- 파이썬의 리스트에 비해 빠르고 강력한 기능 내포
- 특정 인댁스에 바로 접근 가능, 배열의 크기를 자유대로 바꿀 수 있음(reshape)
Numpy 기본 사용법
a = [1, 2, 3, 4]
b = [5, 6, 7, 8] #리스트 생성
array = np.array(a)
array = np.array(b) #numpy의 배열 생성
array = np.array([1], [2]) #2x1의 배열 생성
print(array.size)
print(array.dtype)
print(array[2]) #특정 인댁스에 바로 접근
print(array.shape)
array1 = np.arange(x) #x-1의 값까지 자동으로 데이터를 채워서 배열 생성, 파이썬은 배열을 만들때 x-1까지 만듬이 특징
array2 = np.zeros((4,4), dtype=float) #dtype에 맞는 4x4의 0으로 채워진 행렬 생성
array3 = np.ones((3,3), dtype=str) #dtype에 맞는 3x3의 1로 채워진 행렬 생성
array4 = np.random.randint(0,10,(3,3)) #3x3의 0~9까지 랜덤형성된 행렬 생성
np.random.seed(5) #5를 기준으로 난수의 재연 (실행마다 결과 동일)
array5 = np.random.normal(0,1,(3,3)) #평균 0, 표준편차가 1인 표준 정규를 띄는 배열
array6 = np.concatenate([a], [b]) #행으로 배열 합치기
array7 = np.concatenate([a], [b], axis=0) #세로로 배열 합치기
array8 = np.split(a, [2], axis=1) #인덱스 2(열)를 기준으로 왼쪽부분을 split
array9 = array.sort() #오름차순 정렬, 내림차순은 [::-1]을 ()옆에 덧붙이면 된다.
array9 = array.sort(axis=0) #열을 기준으로 오름차순 정렬
array10 = np.linspace(0, 10, 5) #균일한 간격으로 데이터 생성
array11 = np.unique(a) #중복되는 원소 제거
Numpy의 연산과 함수
- 배열에 대한 기본적인 사친연산을 지원합니다.
- 서로 다른 형태의 배열을 연산 시 행 우선으로 수행합니다.(Broadcast)
- Masking 연산(T,F)
- 집계 함수(sum, mean, min, max)
Numpy의 활용
- 저장과 불러오기:
np.save('name', array)
np.savez('name', array1 = name1, array2 = name2)
np.load('name')
- 배열 객체 복사:
array2 = array1.copy() #array2의 값을 변경해도 array1은 변하지 않는다, 선언 안할 시 array1이 영향을 받음.