ufunc
는 유니버설 함수(Universal Function)의 약자이며, 넘파이에서 제공하는 빠르고 효율적인 벡터화된 연산을 지원하는 함수들이다. 단, 동일한 크기를 가진 배열끼리만 가능하다. (브로드 캐스팅으로 해결 가능!)
ufunc
는 배열의 요소별(element-wise)로 작동하며, 일반적인 산술 연산, 비교 연산, 논리 연산 등을 포함해 다양한 수학적 연산을 빠르게 수행할 수 있다.
ufunc
의 특징
- 배열 연산을 요소별로 빠르게 수행: 파이썬의 루프를 사용하지 않고도 배열 전체에 대해 연산을 빠르게 처리할 수 있다.
- 벡터화된 연산: 반복문 없이 배열 전체에 대해 연산을 수행함으로써 성능을 크게 향상시킨다.
- 브로드캐스팅 지원: 배열 간 크기가 다를 때도 자동으로 크기를 맞춰서 연산을 수행할 수 있다.
주요 ufunc
함수들:
- 산술 연산:
add
,subtract
,multiply
,divide
등. - 수학 함수:
sin
,cos
,exp
,sqrt
등. - 비교 연산:
greater
,less
,equal
등. - 논리 연산:
logical_and
,logical_or
,logical_not
등.
1. 간단한 ufunc
예시: 배열 덧셈
넘파이에서는 +
연산자 자체도 ufunc
로 구현되어 있지만, 명시적으로 np.add()
함수를 사용할 수 있다.
import numpy as np
# 두 배열 생성
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# ufunc인 add 함수를 사용하여 두 배열의 요소별 덧셈 수행
result = np.add(arr1, arr2)
print("두 배열의 요소별 덧셈 결과:", result)
결과:
두 배열의 요소별 덧셈 결과: [5 7 9]
2. ufunc
를 사용한 수학 연산 예시: 제곱근 구하기
# 배열 생성
arr = np.array([1, 4, 9, 16])
# ufunc인 sqrt 함수 사용하여 요소별 제곱근 구하기
sqrt_result = np.sqrt(arr)
print("요소별 제곱근 결과:", sqrt_result)
결과:
요소별 제곱근 결과: [1. 2. 3. 4.]
3. ufunc
를 사용한 삼각 함수 예시: 사인 함수
# 배열 생성 (각도 값)
angles = np.array([0, np.pi/2, np.pi])
# ufunc인 sin 함수 사용하여 요소별 사인 값 계산
sin_result = np.sin(angles)
print("요소별 사인 값:", sin_result)
결과:
요소별 사인 값: [0. 1. 0.]
4. 비교 연산 ufunc
예시
# 두 배열 비교
arr1 = np.array([1, 2, 3])
arr2 = np.array([3, 2, 1])
# ufunc인 greater 함수로 두 배열의 요소별 비교 (arr1 > arr2)
greater_result = np.greater(arr1, arr2)
print("요소별 비교 결과 (arr1 > arr2):", greater_result)
결과:
요소별 비교 결과 (arr1 > arr2): [False False True]
브로드캐스팅과 ufunc
의 활용 ⭐️⭐️⭐️⭐️⭐️
넘파이의 ufunc
는 크기가 다른 배열 간에도 연산을 지원하는 브로드캐스팅을 할 수 있다.
# 2x3 배열과 1x3 배열
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([1, 2, 3])
# 요소별 덧셈 (브로드캐스팅이 적용됨)
broadcast_result = np.add(arr1, arr2)
broadcast_result = np.add(arr2, 3)
print("브로드캐스팅 덧셈 결과:\n", broadcast1_result)
print("브로드캐스팅 덧셈 결과_scalar:\n", broadcast2_result)
결과:
브로드캐스팅 덧셈 결과:
[[2 4 6]
[5 7 9]]
브로드캐스팅 덧셈 결과:
[4 5 6]
정리:
ufunc
는 배열의 요소별 연산을 빠르게 수행하는 함수로, 산술 연산, 수학 연산, 비교 연산 등 다양한 작업을 할 수 있다.- 브로드캐스팅을 통해 크기가 다른 배열 간 연산도 가능하다.
- 넘파이에서 기본적인 수학적/논리적 작업을 매우 빠르게 처리할 수 있게 도와준다.
'2학년 2학기 > 데이터 사이언스 입문' 카테고리의 다른 글
비교, 마스크, Bool 연산 (0) | 2024.10.05 |
---|---|
Numpy - 브로드캐스팅 (0) | 2024.09.26 |
Numpy - 배열 내 요소 접근(인덱싱과 슬라이싱) (0) | 2024.09.26 |
Numpy - ndarray의 속성 (0) | 2024.09.26 |
Numpy - random (0) | 2024.09.26 |