NumPy 유니버설 함수 소개

PythonPythonBeginner
지금 연습하기

This tutorial is from open-source community. Access the source code

💡 이 튜토리얼은 영어로 번역되었습니다. 원본을 보려면 영어로 전환

소개

이 랩에서는 NumPy Universal Functions (ufuncs) 의 기본 사항을 탐구합니다. Ufuncs 는 ndarray 에 대해 요소별로 작동하는 함수로, array broadcasting, type casting 및 기타 표준 기능을 지원합니다. Ufuncs 의 다양한 메서드, broadcasting 규칙, type casting 규칙, 그리고 ufunc 동작을 재정의하는 방법에 대해 배우겠습니다.

참고: 08-universal-functions.ipynb에서 코드를 작성할 수 있습니다. 일부 인쇄 작업은 단계에서 생략되었으며, 필요에 따라 출력을 인쇄할 수 있습니다.

기본 산술 연산

기본 ufuncs 는 스칼라에 대해 작동하며, 가장 간단한 예는 덧셈 연산자입니다. 덧셈 연산자를 사용하여 두 배열을 요소별로 더하는 방법을 살펴보겠습니다.

import numpy as np

## 두 배열 생성
arr1 = np.array([0, 2, 3, 4])
arr2 = np.array([1, 1, -1, 2])

## 배열을 요소별로 더하기
result = arr1 + arr2

## 결과 출력
print(result)

Output:

array([1, 3, 2, 6])

Ufunc 메서드

Ufuncs 는 reduce, accumulate, reduceat, outer 의 네 가지 메서드를 가지고 있습니다. 이러한 메서드는 배열에 대한 연산을 수행하는 데 유용합니다. reduce 메서드를 살펴보겠습니다.

import numpy as np

## 배열 생성
arr = np.arange(9).reshape(3, 3)

## 첫 번째 축을 따라 배열을 reduce
result = np.add.reduce(arr, 1)

## 결과 출력
print(result)

Output:

array([ 3, 12, 21])

출력 타입 결정

ufunc 의 출력은 모든 입력 인수가 ndarray 가 아닌 경우 반드시 ndarray 일 필요는 없습니다. 출력 타입은 입력 타입과 타입 캐스팅 규칙에 따라 결정될 수 있습니다. 예시를 살펴보겠습니다.

import numpy as np

## 배열 생성
arr = np.arange(9).reshape(3, 3)

## 곱셈을 수행하고 출력 타입을 지정
result = np.multiply.reduce(arr, dtype=float)

## 결과 출력
print(result)

Output:

array([ 0., 28., 80.])

브로드캐스팅 (Broadcasting)

브로드캐스팅은 ufunc 의 강력한 기능으로, 서로 다른 형태의 배열에 대한 연산을 수행할 수 있게 해줍니다. 브로드캐스팅 규칙은 서로 다른 형태의 배열이 연산 중에 어떻게 처리되는지를 결정합니다. 예시를 살펴보겠습니다.

import numpy as np

## 두 개의 배열 생성
arr1 = np.array([1, 2, 3])
arr2 = np.array([[1], [2], [3]])

## 배열 곱셈
result = arr1 * arr2

## 결과 출력
print(result)

Output:

array([[1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]])

타입 캐스팅 규칙 (Type Casting Rules)

타입 캐스팅은 제공된 입력 타입에 대한 핵심 루프 구현이 없을 때 ufunc 의 입력에 대해 수행됩니다. 캐스팅 규칙은 데이터 타입이 다른 데이터 타입으로 안전하게 캐스팅될 수 있는 시점을 결정합니다. 예시를 살펴보겠습니다.

import numpy as np

## int 가 float 로 안전하게 캐스팅될 수 있는지 확인
result = np.can_cast(np.int, np.float)

## 결과 출력
print(result)

Output:

True

Ufunc 동작 재정의 (Overriding Ufunc Behavior)

ndarray 서브클래스를 포함한 클래스는 특정 특수 메서드를 정의하여 ufunc 이 해당 클래스에 대해 어떻게 작동하는지를 재정의할 수 있습니다. 이를 통해 ufunc 동작을 사용자 정의할 수 있습니다. 예시를 살펴보겠습니다.

import numpy as np

## 사용자 정의 클래스 정의
class MyArray(np.ndarray):
    def __add__(self, other):
        print("Custom add method called")
        return super().__add__(other)

## 사용자 정의 클래스의 인스턴스 생성
arr = MyArray([1, 2, 3])

## 덧셈 수행
result = arr + 1

## 결과 출력
print(result)

Output:

Custom add method called
[2 3 4]

요약 (Summary)

이 랩에서는 NumPy 유니버설 함수 (ufuncs) 의 기본 사항에 대해 배웠습니다. ufuncs 의 다양한 메서드, 브로드캐스팅 규칙 (broadcasting rules), 타입 캐스팅 규칙 (type casting rules), 그리고 ufunc 동작을 재정의하는 방법을 살펴보았습니다. Ufuncs 는 배열에 대한 요소별 연산을 효율적으로 수행하기 위한 강력한 도구입니다.

OSZAR »