파이썬/파이썬 기초

[Python] Numpy 라이브러리 사용법 총 정리 [지속 업데이트]

Song 컴퓨터공학 2023. 7. 30. 23:33

제 스스로도 필요할 때마다 찾아보기 위해 모르는 내용이 생기면 지속적으로 업데이트 하는 Numpy 사용법 포스팅입니다. 내용이 많기 때문에 목차의 하이퍼링크나 Ctrl+F 를 통해 필요한 내용을 찾아 보시면 되겠습니다. 아래는 공식문서입니다.

 

NumPy reference — NumPy v1.25 Manual

 

numpy.org


[목차]

 

 


 Numpy 배열 초기화하기

import numpy as np

# List와의 상호변환
array = np.array([1, 2, 3])
print(array.size) 	# 배열의 크기
print(array.dtype) 	# 배열 원소의 타입
print(array[2]) 	# 인덱스 2의 원소

# 0부터 3까지의 배열 만들기
array1 = np.arange(4)
print(array1)

# 0으로 초기화
array2 = np.zeros((4, 4), dtype=float)
print(array2)

# 1로 초기화
array3 = np.ones((3, 3), dtype=str)
print(array3)

# 0부터 9까지 랜덤하게 초기화 된 배열 만들기
array4 = np.random.randint(0, 10, (3, 3))
print(array4)

# 평균이 0이고 표준편차가 1인 표준 정규를 띄는 배열
array5 = np.random.normal(0, 1, (3, 3))
print(array5)

 

 

 Numpy 배열 가로 축으로 합치기

array1 = np.array([1, 2, 3]) 
array2 = np.array([4, 5, 6])
array3 = np.concatenate([array1, array2])

print(array3.shape)
print(array3)

 

 

Numpy 세로 축으로 합치기

array1 = np.arange(4).reshape(1, 4)			# 0~3 값을 가지는 1*4 형태의 행렬 생성
array2 = np.arange(8).reshape(2, 4)			# 0~7 값을 가지는 2*4 형태의 행렬 생성
array3 = np.concatenate([array1, array2], axis=0)	# axis = 0 이 세로 방향, 디폴트는 axis = 1(가로)

print(array1)
print(array2)
print(array3.shape)
print(array3)

만약 형태가 맞지 않는 상태에서 가로 축으로 합치려고 하면 다음과 같은 오류가 발생한다.

ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 0, the array at index 0 has size 1 and the array at index 1 has size 2

 

 

Numpy 배열 형태 변경하기

array1 = np.array([1, 2, 3, 4])
array2 = array1.reshape((2, 2))
print(array1)
print(array1.shape)
print()
print(array2)
print(array2.shape)

print()
array3 = np.array([1, 2, 3, 4, 5, 6]) 	# 1*6처럼 보이지만 (6,) 1*6 행렬 연산을 위해서는 reshape가 필요
array4 = array3.reshape(1, 6)		# [[1, 2, 3, 4, 5, 6]]
array5 = array3.reshape(6, 1)
print(array3.shape)
print(array4.shape)

print(array3)
print(array4)
print(array5)

 

 

Numpy 배열 나누기

array = np.arange(8).reshape(2, 4)
left, right = np.split(array, [2], axis=1)

print(array)
print()

print(left.shape)
print(right.shape)
print()

print(left)
print(right)
print()

print(right[1][1])
print()

left, right = np.split(array, [1], axis=1)
print(left.shape)
print(right.shape)
print()

print(left)
print(right)
print()

axis 를 통한 축 설정과 인덱스 지정을 통해 행렬을 나눌 수 있다.

 

 

 

서로 다른 형태 Numpy 배열 연산

# 다른 형태의 Numpy 배열 덧셈 가능
array1 = np.arange(4).reshape(2, 2)
array2 = np.arange(2)
array3 = array1 + array2

print(array1)
print(array2)
print()
print(array3)
print()

array1 = np.arange(0, 8).reshape(2, 4)
array2 = np.arange(0, 8).reshape(2, 4)
array3 = np.concatenate([array1, array2], axis=0)
array4 = np.arange(0, 4).reshape(4, 1)

print(array3)
print(array4)
print()
print(array3 + array4)

 

 

Numpy 마스킹 연산

Numpy 원소의 값을 조건에 따라 바꿀 때 사용하는 마스킹 연산입니다. 반복문보다 훨씬 빠르게 동작하며, 주로 이미지 처리 부분에서 많이 사용되는 연산입니다.

# Numpy 원소 값을 조건에 따라 바꿀 때 마스킹 연산
array1 = np.arange(16).reshape(4, 4)
print(array1)
print()

array2 = array1 < 10
print(array2)
print()

array1[array2] = 100
print(array1)

 

 

Numpy 집계 함수

array = np.arange(16).reshape(4, 4)
print(array)

print("최대값:", np.max(array))
print("최소값:", np.min(array))
print("합계:", np.sum(array))
print("평균값:", np.mean(array))
print("합계:", np.sum(array, axis=0))

 

 

Numpy 객체 저장 및 불러오기, 객체 복사

# 단일 객체 저장 및 불러오기
array = np.arange(0, 10)
np.save('saved.npy', array)

result = np.load('saved.npy')
print(result)
print()

# 복수 객체 저장 및 불러오기
array1 = np.arange(0, 10)
array2 = np.arange(10, 20)
np.savez('saved.npz', array1=array1, array2=array2)

data = np.load('saved.npz')
result1 = data['array1']
result2 = data['array2']
print(result1)
print(result2)
print()

# Numpy 배열 객체 복사
array1 = np.arange(0, 10)
array2 = array1.copy()
print(array2)

 

 

Numpy 원소 정렬

# Numpy 원소 오름차순 정렬
array = np.array([5, 9, 10, 3, 1])
array.sort()
print(array)

# Numpy 원소 내림차순 정렬
array = np.array([5, 9, 10, 3, 1])
array.sort()
print(array[::-1])

# 각 열을 기준으로 정렬
array = np.array([[5, 9, 10, 3, 1], [8, 3, 4, 2, 5]])
array.sort(axis=0)
print(array)

 

 

Numpy 중복 원소 제거

# 중복된 원소 제거
array = np.array([1, 1, 2, 3, 3, 3, 1])
print(np.unique(array))


# 출력 : [1 2 3]

 

 

Numpy 균일한 간격의 데이터 생성

# 균일한 간격으로 데이터 생성
array = np.linspace(0, 10, 5)
print(array)

# 출력 : [ 0.   2.5  5.   7.5 10. ]