2-3. NumPy: 유용한 함수

1. 배열 형태 변환

NumPy는 배열의 형태를 자유자재로 변환할 수 있는 강력한 기능을 제공합니다. 이는 데이터를 다양한 방식으로 재구성하고, 특정 연산에 적합한 형태로 변환하는 데 필수적입니다. 데이터 과학과 기계 학습 분야에서는 특히, 데이터의 차원을 변경하고, 모델의 입력 형태에 맞게 조정하는 과정에서 널리 활용됩니다.

1) reshape

reshape 함수는 배열의 형태를 변경하는 가장 기본적인 방법입니다. 새로운 형태를 인자로 받아, 원본 배열의 데이터를 새로운 형태로 재배열합니다. reshape을 사용할 때, 원래 배열의 요소 개수와 새로운 형태의 요소 개수가 일치해야 합니다. 즉, 새로운 형태의 모든 차원의 크기의 곱원본 배열의 전체 요소 수와 같아야 합니다.

import numpy as np

# 1차원 배열 생성
arr = np.array([1, 2, 3, 4, 5, 6])

# 2차원 배열로 변환 (2x3)
reshaped_arr = arr.reshape(2, 3)
print(reshaped_arr)

reshape 예제 코드 설명 후

위 예제에서, 1차원 배열 [1, 2, 3, 4, 5, 6]reshape(2, 3)을 통해 2x3 형태의 2차원 배열로 변환됩니다. reshape은 메모리 상의 데이터는 그대로 유지한 채, 배열의 view를 변경하는 방식으로 동작합니다. 따라서, 원본 배열을 수정하면, reshape으로 생성된 배열에도 변경 사항이 반영됩니다.

2) resize

resize 함수는 reshape과 유사하게 배열의 형태를 변경하지만, 몇 가지 중요한 차이점이 있습니다. 첫째, resize는 원본 배열 자체를 직접 수정합니다. 둘째, resize는 새로운 형태의 크기에 맞춰 원본 배열의 요소를 잘라내거나, 반복해서 채울 수 있습니다. 만약 새로운 형태가 원본 배열보다 크면, 요소가 반복되어 채워지고, 작으면 잘립니다.

import numpy as np

# 1차원 배열 생성
arr = np.array([1, 2, 3, 4, 5, 6])

# 배열 형태 변경 (원본 배열 수정)
arr.resize(3, 3)
print(arr)

resize 함수를 사용할 때는, 원본 배열이 변경된다는 점을 주의해야 합니다. 또한, resizereshape에 비해 성능 면에서 다소 불리할 수 있습니다.

3) transpose

transpose 함수는 배열의 차원을 변경하는 또 다른 유용한 기능입니다. 특히, 2차원 배열(행렬)의 행과 열을 바꾸는 전치 연산에 자주 사용됩니다. transpose는 원본 배열의 데이터를 복사하지 않고, 새로운 view를 반환합니다.

import numpy as np

# 2차원 배열 생성 (3x2)
arr = np.array([[1, 2], [3, 4], [5, 6]])

# 배열 전치 (2x3)
transposed_arr = arr.transpose()
print(transposed_arr)

위 예제에서, 3x2 형태의 배열은 transpose 함수를 사용하여 2x3 형태의 배열로 전치됩니다.

2. 수학 함수

NumPy는 배열에 적용할 수 있는 다양한 수학 함수를 제공합니다. 이러한 함수들은 배열의 모든 요소에 대해 한 번에 연산을 수행하므로, 반복문을 사용하는 것보다 훨씬 빠르고 효율적입니다.

1) 기본적인 산술 연산

NumPy는 덧셈(+), 뺄셈(-), 곱셈(), 나눗셈(/), 거듭제곱(*)과 같은 기본적인 산술 연산을 지원합니다. 이러한 연산은 배열과 스칼라 값 또는 다른 배열 사이에서 수행될 수 있습니다.

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

# 배열과 스칼라 연산
result1 = arr1 + 2  # [3, 4, 5]
print(result1)

# 배열 간 연산
result2 = arr1 + arr2  # [5, 7, 9]
print(result2)

2) 삼각 함수

NumPy는 sin, cos, tan과 같은 삼각 함수를 제공합니다. 이러한 함수들은 배열의 각 요소에 대해 삼각 함수 값을 계산합니다.

import numpy as np

arr = np.array([0, np.pi/2, np.pi])

# 사인 함수 적용
sin_values = np.sin(arr)
print(sin_values)

3) 지수 및 로그 함수

NumPy는 exp (지수 함수), log (자연 로그), log10 (상용 로그)과 같은 지수 및 로그 함수를 제공합니다. 이러한 함수들은 과학 기술 계산에서 널리 사용됩니다.

import numpy as np

arr = np.array([1, 2, 3])

# 지수 함수 적용
exp_values = np.exp(arr)
print(exp_values)

# 로그 함수 적용
log_values = np.log(arr)
print(log_values)

4) 기타 유용한 수학 함수

NumPy는 이 외에도 sqrt (제곱근), abs (절댓값), round (반올림) 등 다양한 수학 함수를 제공합니다.

3. 통계 함수

NumPy는 배열의 통계적 특성을 계산하는 데 유용한 다양한 함수를 제공합니다. 이러한 함수들은 데이터 분석, 기계 학습 등 다양한 분야에서 널리 활용됩니다.

1) 평균, 중앙값, 표준 편차

  • mean: 배열의 평균을 계산합니다.
  • median: 배열의 중앙값을 계산합니다.
  • std: 배열의 표준 편차를 계산합니다.
import numpy as np

arr = np.array([1, 2, 3, 4, 5])

# 평균 계산
mean_value = np.mean(arr)
print(mean_value)

# 중앙값 계산
median_value = np.median(arr)
print(median_value)

# 표준 편차 계산
std_value = np.std(arr)
print(std_value)

2) 최소값, 최대값

  • min: 배열의 최소값을 찾습니다.
  • max: 배열의 최대값을 찾습니다.
import numpy as np

arr = np.array([1, 2, 3, 4, 5])

# 최소값 계산
min_value = np.min(arr)
print(min_value)

# 최대값 계산
max_value = np.max(arr)
print(max_value)

3) 합, 누적합

  • sum: 배열의 모든 요소의 합을 계산합니다.
  • cumsum: 배열의 각 요소까지의 누적 합을 계산합니다.
import numpy as np

arr = np.array([1, 2, 3, 4, 5])

# 합 계산
sum_value = np.sum(arr)
print(sum_value)

# 누적 합 계산
cumsum_values = np.cumsum(arr)
print(cumsum_values)

4) 분산

  • var: 배열의 분산을 계산합니다. 분산은 데이터가 평균으로부터 얼마나 떨어져 있는지를 나타내는 척도입니다.
import numpy as np

arr = np.array([1, 2, 3, 4, 5])

# 분산 계산
var_value = np.var(arr)
print(var_value)

4. 응용 및 활용 사례

NumPy의 유용한 함수들은 다양한 분야에서 활용됩니다.

1) 데이터 전처리

배열 형태 변환, 수학 함수, 통계 함수는 데이터 전처리에 필수적인 도구입니다. 예를 들어, 머신러닝 모델의 입력으로 사용할 데이터를 특정 형태로 변환하거나, 이상치를 제거하고, 특징을 스케일링하는 데 사용될 수 있습니다.

2) 이미지 처리

NumPy 배열은 이미지를 표현하는 데 널리 사용됩니다. 이미지 픽셀 데이터를 배열로 표현하고, NumPy 함수를 사용하여 이미지의 밝기, 대비를 조절하거나, 필터를 적용하는 등의 작업을 수행할 수 있습니다.

3) 과학 기술 계산

NumPy는 과학 기술 계산을 위한 다양한 함수를 제공합니다. 예를 들어, 선형 대수, 푸리에 변환, 통계적 분석 등에서 널리 사용됩니다.

5. 주의사항과 트러블슈팅

1) 데이터 타입

NumPy 배열은 동일한 데이터 타입의 요소들로 구성됩니다. 따라서, 배열 연산을 수행할 때 데이터 타입에 주의해야 합니다. 예를 들어, 정수 배열과 실수 배열을 연산하면, 결과는 실수 타입으로 변환될 수 있습니다.

2) 차원

배열의 차원(ndim)과 형태(shape)는 NumPy 연산의 결과에 영향을 미칩니다. 브로드캐스팅 규칙을 이해하고, 예상치 못한 오류를 방지해야 합니다.

3) 메모리 사용

대규모 배열을 다룰 때는 메모리 사용량에 주의해야 합니다. 불필요한 배열 생성을 피하고, view를 활용하여 메모리 효율을 높이는 방법을 고려해야 합니다.

6. 결론

NumPy의 유용한 함수들은 데이터 분석, 과학 기술 계산, 기계 학습 등 다양한 분야에서 핵심적인 역할을 합니다. 배열 형태 변환, 수학 함수, 통계 함수를 효과적으로 활용하면, 데이터를 효율적으로 처리하고, 복잡한 문제를 해결할 수 있습니다. 각 함수의 특징과 사용법을 정확히 이해하고, 실제 문제에 적용하는 연습을 통해 NumPy 활용 능력을 향상시킬 수 있습니다.

비슷한 글 추천

Comments (0)

No comments yet. Be the first to comment!