NumPy(Numerical Python)는 파이썬에서 과학 계산과 데이터 분석을 위한 핵심 라이브러리 중 하나입니다. NumPy는 다차원 배열 객체와 배열 연산을 제공하며, 이를 활용하여 고성능의 수치 계산을 수행할 수 있습니다.
NumPy의 핵심 기능은 다차원 배열인 NumPy 배열입니다. NumPy 배열은 파이썬의 기본 리스트보다 더 빠르고, 메모리를 효율적으로 사용합니다. NumPy 배열을 사용하면 벡터화된 연산을 수행할 수 있으므로, 반복문 없이도 효율적인 연산을 수행할 수 있습니다.
NumPy 배열은 대규모 데이터 처리와 과학 계산에서 매우 유용합니다. 예를 들어, 이미지나 오디오 데이터 등 다양한 형태의 데이터를 NumPy 배열로 변환하여 처리할 수 있습니다. 또한, NumPy는 선형 대수, 통계, 푸리에 변환 등 다양한 수학 함수와 라이브러리도 제공합니다.
NumPy는 파이썬 데이터 분석 라이브러리인 pandas, 시각화 라이브러리인 matplotlib 등 다른 라이브러리와 함께 사용되어 데이터 분석 및 시각화에 매우 효과적입니다.
numpy 함수
np.sum() | 행렬 합계산 |
np.mean() | 평균계산 |
np.std() | 표준편차계산 |
np.min() | 최솟값 구해줌 |
np.max() | 최댓값 구해줌. |
np.dot() (@ 연산도 2차원배열은 같다.) | 수학적인 내적 구해줌. 첫 번째 행렬의 행수와 두 번째 행렬의 열 수가 같아야 함. |
np.inner() | 내적 구하는 함수(수학의 내적과다름) 첫 번째 행렬의 행수와 두번째 행렬의 행수를 곱한다. |
np.linalg.inv(x) | 역행렬구함. (조건1. 행과 열수가 같아야함. 조건2. det값이 0이 아니어야함.) |
np.linalg.pinv(x) | 유사역행렬구함.(조건1을 만족하지않아도 사용가능) |
np.linspace(start, stop, 갯수) | start에서 stop사이에 갯수를 나눈 수 반환 |
np.array([1,2,3]) | np array 생성(Dynamic typing 지원 안함.하나의 데이터형만 삽입가능) |
np.shape | np array의 dimension구성 반환(차원 축이 추가 될때마다 기존 차원이 밀리고 앞에 추가) |
np.dtype | np array의 데이터 타입 반환 |
np.ndim | dimension의 차원 반환 |
np.size | data의 갯수 반환 |
np.nbytes | ndarray의 object의 메모리 크기 반환 |
np.reshape(x,y) | Array의 shape 크기 변경, element 수는 동일하다(-1로설정시 나머지 요소자동계산) |
np.flatten() | 다차원 array를 1차원으로 변경 |
np.arange(30), np.arange(start,stop,step) | 범위 지정해서 값의 list 생성 |
np.zeros((2,5), dtype, order) | 0으로 찬 2행 5열 배열 생성. |
np.ones((2,5)) | 1로 가득찬 2행 5열 생성 |
np.empty((2,5)) | 메모리 초기화 없이 2행 5열 생성 |
np.ones_like(x) | x와 shape이 같은 1로 찬 배열생성(ones 자리에 zero, empty가능) |
np.identity(3) | 크기가 3 x 3인 단위행렬 생성. |
np.eye(3) np.eye(3,5,k=2) | 대각선이 1인 행렬, k값의 시작 index 변경 가능 |
np.diag(matrix, k = 1) | 대각행렬의 값 추출 ,index k지정 가능(k부터 대각선으로 뽑음) |
np.random.uniform(0,1,10) | 균등분포 0, 1사이 10개 랜덤 추출 |
np.random.normal(0,1,19) | 정규분포 0,1사이 19개 랜덤 추출 |
np.T | 전치행렬 반환 |
- axis, 축의 개념
위의 예시에서 결과는 이렇게 나온다.
x.sum(axis = 1) # array([10, 26, 42])
x.sum(axis = 0) #array([15, 18, 21, 24])
- indexing & slicing
기존 리스트의 경우 a[0][1]의 방법을 사용했지만 numpy array의 경우 a[0,1]로 사용 가능하다.
slicing의 경우 리스트와 달리 행과 열부분을 나눠 slicing이 가능하다.
x = np.array([1,2,3],[4,5,6],[7,8,9])
x[:,1:] # 1열부터 slicing
x[1,1:3] # 1행의 1열부터 2열까지 :없이 지정하면 1개만 나온다.
Concatenate
np.vstack | 수직으로 붙힘 |
np.hstack | 수평으로 붙힘. |
np.concatenate((a,b),axis = 0) | 축설정에 따라 붙힘. |
Concatnate에서처럼의 할당은 Numpy와 list연산간 연산 속도차이가 없다.
numpy array간의 기본적인 사칙연산 지원한다.
- Element-wise operations
- Array간 shape이 같으면 일어남.
Element-wise operation은 두 개의 배열 간의 같은 위치에 있는 원소끼리 연산을 수행하는 것을 의미합니다. 이는 NumPy에서 매우 일반적인 연산 방식 중 하나이며, NumPy 배열을 사용하여 매우 쉽게 수행할 수 있습니다.
예를 들어, 두 개의 1차원 NumPy 배열을 생성하고 각 배열의 같은 위치에 있는 원소끼리 덧셈, 뺄셈, 곱셈, 나눗셈을 수행하는 방법은 다음과 같습니다.
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 덧셈
c = a + b
print(c) # 출력: [5 7 9]
# 뺄셈
c = a - b
print(c) # 출력: [-3 -3 -3]
# 곱셈
c = a * b
print(c) # 출력: [ 4 10 18]
# 나눗셈
c = a / b
print(c) # 출력: [0.25 0.4 0.5 ]
- broadcasting
Shape이 달라도 배열간 연산을 지원한다.
NumPy에서 broadcasting은 서로 다른 형상(shape)을 가지는 배열 간의 연산을 가능하게 하는 메커니즘입니다. 이를 통해 더 작은 배열을 브로드캐스트하여 더 큰 배열의 크기에 맞게 연산을 수행할 수 있습니다. 이러한 방식으로, 큰 배열의 모든 원소에 대해 작은 배열의 연산을 수행할 수 있습니다.
다음은 broadcasting을 사용하여 서로 다른 형상의 두 개의 NumPy 배열 간의 연산을 수행하는 예제입니다.
위의 예제에서는, 크기가 1인 2차원 배열(b)이 1차원 배열(a)의 모든 원소에 대해 연산되는 것을 볼 수 있습니다. 이는 broadcasting의 대표적인 예시입니다.
import numpy as np
a = np.array([1, 2, 3])
b = 2
c = a + b
print(c) # 출력: [3 4 5]
또 다른 예시로, 다음과 같은 2차원 배열에서 broadcasting이 일어날 수 있습니다.
import numpy as np
a = np.array([[1, 2, 3],
[4, 5, 6]])
b = np.array([10, 20, 30])
c = a + b
print(c) # 출력: [[11 22 33]
# [14 25 36]]
위의 예제에서, 1차원 배열(b)이 2차원 배열(a)의 두 번째 축(axis)에 대해 broadcasting이 수행됩니다. 이러한 방식으로, 배열 간의 연산이 가능하게 되며, 더 많은 차원과 형상을 가진 배열에 대해서도 broadcasting을 수행할 수 있습니다.
'AI > Numpy' 카테고리의 다른 글
비교연산, boolean index, fancy index (0) | 2023.03.11 |
---|