본문 바로가기

SW/파이썬

Numpy

행렬의 필요성

- 현실 세계의 많은 문제는 행렬(리스트)을 이용해 해결할 수 있습니다.

- axis 0(행), 1차원: 벡터

- axis 1(열), 2차원: 행렬

- axis 2(채널), 3차원: Tensor

 

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이 영향을 받음.