NumPyのユニバーサル関数入門

PythonPythonBeginner
今すぐ練習

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、NumPyのユニバーサル関数(ufunc)の基本を学びます。ufuncは、要素ごとにndarrayを操作し、配列のブロードキャスト、型キャスト、およびその他の標準機能をサポートする関数です。ufuncのさまざまなメソッド、ブロードキャスト規則、型キャスト規則、およびufuncの動作をオーバーライドする方法について学びます。

注: 08-universal-functions.ipynb でコードを記述できます。手順では一部の出力操作を省略していますが、必要に応じて出力を表示できます。

基本的な算術演算

基本的なufuncはスカラーに対して動作し、最も単純な例は加算演算子です。要素ごとに2つの配列を加算するには、加算演算子をどのように使用するか見てみましょう。

import numpy as np

## Create two arrays
arr1 = np.array([0, 2, 3, 4])
arr2 = np.array([1, 1, -1, 2])

## Add the arrays element-wise
result = arr1 + arr2

## Print the result
print(result)

出力:

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

Ufuncメソッド

Ufuncには、reduce、accumulate、reduceat、outerの4つのメソッドがあります。これらのメソッドは、配列に対する操作を行う際に便利です。まずは、reduceメソッドを見てみましょう。

import numpy as np

## Create an array
arr = np.arange(9).reshape(3, 3)

## Reduce the array along the first axis
result = np.add.reduce(arr, 1)

## Print the result
print(result)

出力:

array([ 3, 12, 21])

出力型の決定

すべての入力引数がndarrayでない場合、ufuncの出力は必ずしもndarrayではありません。出力型は、入力型と型キャストの規則に基づいて決定できます。例を見てみましょう。

import numpy as np

## Create an array
arr = np.arange(9).reshape(3, 3)

## Perform multiplication and specify the output type
result = np.multiply.reduce(arr, dtype=float)

## Print the result
print(result)

出力:

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

ブロードキャスト

ブロードキャストは、ufuncの強力な機能であり、異なる形状の配列に対して演算を行うことができます。ブロードキャスト規則は、演算中に異なる形状の配列がどのように扱われるかを決定します。例を見てみましょう。

import numpy as np

## Create two arrays
arr1 = np.array([1, 2, 3])
arr2 = np.array([[1], [2], [3]])

## Multiply the arrays
result = arr1 * arr2

## Print the result
print(result)

出力:

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

型キャスト規則

提供された入力型に対するコアループ実装がない場合、ufuncの入力に対して型キャストが行われます。キャスト規則は、データ型を安全に別のデータ型にキャストできる時期を決定します。例を見てみましょう。

import numpy as np

## Check if int can be safely cast to float
result = np.can_cast(np.int, np.float)

## Print the result
print(result)

出力:

True

Ufuncの動作のオーバーライド

ndarrayサブクラスを含むクラスは、特定の特殊メソッドを定義することで、ufuncがそれらに対してどのように動作するかをオーバーライドすることができます。これにより、ufuncの動作をカスタマイズすることが可能になります。例を見てみましょう。

import numpy as np

## Define a custom class
class MyArray(np.ndarray):
    def __add__(self, other):
        print("Custom add method called")
        return super().__add__(other)

## Create an instance of the custom class
arr = MyArray([1, 2, 3])

## Perform addition
result = arr + 1

## Print the result
print(result)

出力:

Custom add method called
[2 3 4]

まとめ

この実験では、NumPyのユニバーサル関数(ufunc)の基本について学びました。ufuncのさまざまなメソッド、ブロードキャスト規則、型キャスト規則、およびufuncの動作をどのようにオーバーライドするかを検討しました。ufuncは、配列に対して要素ごとの演算を効率的に行うための強力なツールです。