1. 통계함수
1.1 평균, 분산, 표준편차
NumPy는 평균(np.mean()
), 분산(np.var()
), 표준편차(np.std()
) 등 다양한 통계 함수를 제공합니다. 이러한 함수들은 대량의 수치 데이터를 빠르고 효율적으로 분석할 수 있게 해줍니다.
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print("합계:", np.sum(arr)) # 합계
print("평균:", np.mean(arr)) # 평균
print("분산:", np.var(arr)) # 분산
print("표준편차:", np.std(arr)) # 표준편차
1.2 중앙값, 최빈값
NumPy는 중앙값(np.median()
), 최빈값(np.argmax()
) 등의 함수를 제공합니다. 중앙값은 숫자들을 순서대로 나열했을 때 가운데 있는 값이고, 최빈값은 가장 자주 나타나는 값입니다. 이 함수들을 사용하면 데이터의 분포와 중심 경향을 파악할 수 있습니다.
import numpy as np
arr = np.array([1, 2, 2, 3, 3, 3, 4, 5])
print(np.median(arr))
counts = np.bincount(arr)
print(np.argmax(counts))
2. 수학 함수
2.1 삼각함수
NumPy는 사인(np.sin()
), 코사인(np.cos()
), 탄젠트(np.tan()
) 등의 삼각함수를 제공합니다. 이 함수들은 각도와 관련된 값을 계산하며, 물리학, 공학, 그리고 컴퓨터 그래픽스 등 다양한 분야에서 사용됩니다.
import numpy as np
angles = np.array([0, 30, 45, 60, 90])
radians = np.deg2rad(angles)
print("사인:", np.sin(radians))
print("코사인:", np.cos(radians))
print("탄젠트:", np.tan(radians))
2.2 지수함수, 로그함수
NumPy는 지수함수(np.exp()
), 로그함수(np.log()
) 등 다양한 수학 함수를 제공합니다. 이러한 함수들은 배열의 각 요소에 대해 효율적으로 연산을 수행합니다. 지수함수는 e의 거듭제곱을 계산하고, 로그함수는 그 반대 개념입니다. 이런 함수들은 과학 계산이나 데이터 분석에서 매우 중요하게 사용됩니다. e는 자연상수로 약 2.71828입니다.
import numpy as np
print("지수함수:", np.exp(np.array([1, 2, 3])))
print("로그함수:", np.log(np.array([1, 10, 100, 2, 4, 8, 2.71828183, 7.3890561, 20.08553692])))
2.3 제곱근, 거듭제곱
NumPy는 제곱근(np.sqrt()
)과 거듭제곱(np.power()
)을 계산하는 함수도 제공합니다. 제곱근은 어떤 수를 제곱했을 때 나오는 값을 거꾸로 구하는 것이고, 거듭제곱은 같은 수를 여러 번 곱하는 것입니다. 이런 함수들은 과학적 계산이나 데이터 스케일링에서 자주 사용됩니다.
import numpy as np
numbers = np.array([1, 4, 9, 16, 25])
print("제곱근:", np.sqrt(numbers))
print("거듭제곱 (2제곱):", np.power(numbers, 2))
print("거듭제곱 (3제곱):", np.power(numbers, 3))
3. 유틸리티 함수
3.1 np.where
np.where()는 주어진 조건을 만족하는 배열 요소의 인덱스를 찾아 반환하는 함수입니다. 이 함수는 데이터 분석에서 특정 조건을 만족하는 데이터를 빠르게 찾아내는 데 매우 유용합니다.
import numpy as np
arr1 = np.array([1, 2, 3, 4, 5])
indices = np.where(arr1 > 3)
print("3보다 큰 요소의 인덱스:", indices)
arr2 = np.array([1, 0, 3, 0, 5])
nonzero_indices = np.where(arr2)
print("0이 아닌 요소의 인덱스:", nonzero_indices)
arr3 = np.array([1, 0, 3, 0, 5])
zero_indices = np.where(arr3 == 0)
print("0인 요소의 인덱스:", zero_indices)
다차원 배열에서 1이 어떤 위치에 있는지 찾아보겠습니다.
import numpy as np
arr = np.array([[1, 2, 3], [1, 5, 6], [7, 1, 9]])
indices = np.where(arr == 1)
print("1이 있는 위치:", indices)
이때 각각의 인덱스는 튜플로 반환됩니다. 짝을 이루게 하여 보기 좋게 출력하려면 다음과 같이 할 수 있습니다.
import numpy as np
arr = np.array([[1, 2, 3], [1, 5, 6], [7, 1, 9]])
indices = np.where(arr == 1)
rows, cols = indices
list(zip(rows, cols))
3.2 np.unique
np.unique()는 배열에서 중복된 값을 제거하고, 유일한 값들만을 정렬된 상태로 반환하는 함수입니다. 이는 마치 수집가가 우표 컬렉션에서 중복된 우표를 제거하는 것과 비슷합니다. 데이터의 고유한 특성을 파악하거나, 범주형 데이터를 처리할 때 특히 유용합니다.
import numpy as np
arr = np.array([1, 2, 2, 3, 3, 3, 4, 4, 5])
unique_values = np.unique(arr)
print("고유한 값:", unique_values)
3.3 np.sort
np.sort()는 배열의 요소를 오름차순으로 정렬하는 함수입니다. 이는 마치 도서관에서 책을 번호순으로 정리하는 것과 같습니다. 정렬된 데이터는 원하는 정보를 빠르게 찾거나 전체적인 구조를 파악하는 데 도움을 줍니다.
import numpy as np
arr = np.array([3, 1, 4, 1, 5, 9, 2, 6])
sorted_arr = np.sort(arr)
print("정렬된 배열:", sorted_arr)
np.sort()
는 파이썬의 원본을 변경하지 않습니다. 원본을 변경하고 싶다면 arr.sort()
를 사용하면 됩니다.
import numpy as np
arr = np.array([3, 1, 4, 1, 5, 9, 2, 6])
np.sort(arr)
3.4 np.argmax / np.argmin
np.argmax()와 np.argmin()은 각각 배열에서 최대값과 최소값의 인덱스를 반환하는 함수입니다.
import numpy as np
arr = np.array([3, 1, 4, 1, 5, 9, 2, 6])
max_index = np.argmax(arr)
min_index = np.argmin(arr)
print("최대값의 인덱스:", max_index)
print("최소값의 인덱스:", min_index)
3.5 np.reshape
np.reshape()는 배열의 형상(shape)을 변경하는 함수입니다.
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6])
reshaped_arr = np.reshape(arr, (2, 3))
print("재구성된 배열:")
print(reshaped_arr)
3.6 np.clip
np.clip()은 배열의 값들을 특정 범위 내로 제한하는 함수입니다.
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
clipped = np.clip(arr, 3, 8)
print("원본 배열:", arr)
print("클리핑된 배열:", clipped)
3.7 np.vectorize
np.vectorize()는 일반 Python 함수를 NumPy 배열에 적용 가능한 벡터화된 함수로 변환합니다.
import numpy as np
def add_and_square(x, y):
return (x + y) ** 2
vectorized_func = np.vectorize(add_and_square)
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
result = vectorized_func(a, b)
print("벡터화된 함수 결과:", result)
3.8 np.random.choice
np.random.choice()는 주어진 1차원 배열에서 무작위로 샘플을 추출하는 함수입니다.
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
random_sample = np.random.choice(arr, size=3, replace=False)
print("무작위 샘플:", random_sample)
3.9 np.random.rand
np.random.rand()는 0과 1 사이의 균일 분포에서 무작위 숫자를 생성하는 함수입니다.
import numpy as np
# 1차원 배열 생성
random_1d = np.random.rand(5)
print("1차원 난수 배열:", random_1d)
# 2차원 배열 생성
random_2d = np.random.rand(3, 2)
print("2차원 난수 배열:",)
print( random_2d)