Python

[Python] Numpy 완전정복2 - 연산, 벡터, 무작위, 수정

라딘 2022. 7. 29. 00:54

[Python] Numpy 완전정복2 - 연산, 벡터, 무작위, 수정

 

Numpy 완전정복1에 이어서 Numpy의 기초적인 문법에 대해 정리하고 자주 사용하게 될 유용한 함수들을 정리해두었습니다!

 

 

1. Numpy 연산

Numpy에서는 다양한 통계 연산 메소드들을 제공합니다. 이 메소드들로 데이터에 다양한 연산을 쉽게 수행할 수 있습니다.

 

np.mean(변수명)  #산술평균

np.average(변수명, weights = [원소별 가중치])  #가중평균

np.median(변수명)  #중위수

np.cumsum(변수명)  #누적합

np.std(변수명)  #표준편차

np.var(변수명)  #분산

np.min(변수명)  #최솟값

np.max(변수명)  #최댓값

np.sum(변수명)  #원소들의 합

np.dot(변수명1, 변수명2)  #행렬곱

 

또한 최솟값, 최댓값이 위치한 인덱스를 반환하는 함수가 존재해 특정 데이터를 찾을 때 유용하게 사용할 수 있습니다.

 

np.argmin(변수명)  #최솟값이 위치한 인덱스

np.argmax(변수명)  #최댓값이 위치한 인덱스

x[x.argmax()]  #최댓값 반환
x[x.argmin()]  #최솟값 반환

 

정렬과 관련된 메소드들도 존재합니다. 

 

np.argsort(변수명)

위 메소드를 사용하면 원본의 인덱스 번호가 오름차순으로 정렬한 후에 어떤 자리에 위치할지 표기합니다.

y = np.argsort(x)
x[y]  #수행하면 x를 오름차순으로 정렬한 결과를 반환

 

np.searchsorted(변수명, 넣을 데이터)

메소드를 사용하면 각각의 원소를 변수에 넣고 오름차순 정렬하면 몇번째 인덱스에 위치하게 될지를 반환합니다.

 

 

 

2. 영벡터, 일벡터

넘파이에서는 영벡터와 일벡터를 만들 수 있는 메소드들을 제공합니다. 

 

np.zeros((row, column))

np.ones((row, column))

을 통해 내가 원하는 차원의 영벡터, 일벡터를 쉽게 생성할 수 있습니다.

a1 = np.zeros(5)  #0을 5개 포함한 벡터 생성
a2 = np.zeros((2,1))  #2행 1열의 영벡터 생성

b1 = np.ones(5)  #1을 5개 포함한 벡터 생성
b2 = np.ones((2,1))  #2행 1열의 일벡터 생성

 

3. 무작위 배열

넘파이에서는 랜덤한 수를 뽑아주는 메소드들을 제공합니다.

랜덤과 관련된 메소드들은 np.random 뒤에 각각의 메소드명을 붙여 사용할 수 있습니다.

 

1) 0과 1 사이의 랜덤한 수 선정

np.random.rand(n)  #0과 1사이에서 임의로 n개의 수를 선정하여 반환

 

2) 특정 범위 내에서 정수를 랜덤하게 선정(복원추출)

np.random.randint(시작점, 끝점+1, size = n)  #지정한 범위 내에서 n개의 정수를 반환

randint 메소드는 복원추출을 기본으로 하기 때문에 중복된 값이 선정될 수 있습니다.

 

3) 특정 범위 내에서 중복되지 않는 정수를 랜덤하게 선정(비복원추출)

np.random.choice(특정 범위를 담은 ndarray, n, replace = False)  #ndarray에 담긴 원소들 중 n개를 비복원추출로 선정

*replace = True로 설정할 경우 복원추출을 진행합니다.

 

4) 랜덤한 수를 추출하되, 한번 추출한 결과를 동일하게 고정하여 사용 - seed 설정

np.random.seeed(임의의 숫자)위 코드를 작성한 뒤 랜덤 메서드를 사용하게 되면 추출하는 수를 고정시켜주게 됩니다.여러 명이 작업할 때, 동일한 결과를 얻어내기 위해 사용합니다.

 

4. 데이터 수정

넘파이에서도 파이썬에서 기본적으로 제공하는 데이터 수정 메소드들을 제공합니다.

 

np.insert(변수명, 인덱스값, 넣을 데이터)  #특정 위치에 새로운 값을 추가할 때

np.append(변수명, 넣을 데이터)  #맨 마지막 위치에 새로운 값을 추가할 때

np.delete(변수명, 삭제할 인덱스값)  #특정 위치의 값을 제거할 때

#4번째 자리에 55를 넣는 방법
a = np.insert(a, 4, 55)

#맨 마지막 자리에 55를 넣는 방법
a = np.insert(a, -1, 55)  #인덱스가 -1이면 맨 마지막 자리
a = np.append(a, 55)

#4번째 자리의 자료를 삭제할 때
np.delete(a, 4)

 

5. 데이터 병합

두 데이터를 하나의 데이터로 합치고 싶을 때 사용할 수 있는 메소드들이 존재합니다.

 

np.concatenate((변수명1, 변수명2), axis = 1 or 0)

axis = 0으로 설정하면 변수1 아래에 변수2를 붙여 데이터를 합쳐줍니다,

axis = 1로 설정하면 변수1의 오른쪽에 변수2를 붙여 데이터를 합쳐줍니다.

 

concatenate와 동일하게 사용할 수 있는 다른 메소드는 vstack, hstack이 있습니다.

np.vstack((변수명1, 변수명2))  #수직, axis = 0과 동일

np.hstack((변수명1, 변수명2))  #수평, axis = 1과 동일