NumPyにおける構造化配列

PythonPythonBeginner
今すぐ練習

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

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

はじめに

この実験では、NumPy の構造化配列について学びます。構造化配列は、データ型が、名前付きフィールドのシーケンスとして組織されたより単純なデータ型のコンポジションである ndarray です。これらは、表形式のデータなどの構造化データを扱う際に便利で、各フィールドがデータの異なる属性を表します。

注: 07-structured-arrays.ipynb でコードを記述できます。手順では一部の印刷操作を省略していますが、必要に応じて出力を印刷できます。

構造化配列の作成

構造化配列を作成するには、np.array 関数を使用して、dtype パラメータを使ってデータ型を指定します。データ型はタプルのリストでなければならず、各タプルは構造化配列のフィールドを表します。各タプルには、フィールド名とそのフィールドのデータ型が含まれている必要があります。

import numpy as np

## Create a structured array
x = np.array([('Alice', 25), ('Bob', 30)], dtype=[('name', 'U10'), ('age', int)])

フィールドへのアクセス

構造化配列の個々のフィールドにアクセスするには、フィールド名を使ったインデックス付けを行います。これにより、そのフィールドの値のみを含む新しい配列が返されます。

## Access the 'name' field
names = x['name']

フィールドの変更

構造化配列の個々のフィールドを変更することもできます。フィールド名を使ったインデックス付けを行い、新しい値を割り当てることで変更できます。

## Modify the 'age' field
x['age'] = [26, 31]

複数のフィールドを使ったインデックス付け

複数のフィールド名のリストを渡すことで、構造化配列を複数のフィールドでインデックス付けすることができます。これにより、指定されたフィールドのみを含む新しい構造化配列が返されます。

## Index with multiple fields
subset = x[['name', 'age']]

構造化配列の比較

2つの構造化配列のdtypeが等しい場合、等号演算子 (==) を使って比較することができます。これにより、すべてのフィールドについて同じ値を持つ要素を示すブール型の配列が返されます。

## Compare two structured arrays
y = np.array([('Alice', 25), ('Bob', 30)], dtype=[('name', 'U10'), ('age', int)])
comparison = x == y

レコード配列の作成

レコード配列は、ndarrayのサブクラスであり、インデックスではなく属性を使ってフィールドにアクセスできるようにします。np.rec.array関数を使ってレコード配列を作成することができます。

## Create a record array
recordarr = np.rec.array([('Alice', 25), ('Bob', 30)], dtype=[('name', 'U10'), ('age', int)])

属性を使ったフィールドへのアクセス

レコード配列のフィールドには、インデックスではなく属性を使ってアクセスできます。これにより、構造化データを扱うためのより便利な方法が提供されます。

## Access fields by attribute
names = recordarr.name

構造化配列をレコード配列に変換する

view メソッドを使って、構造化配列を np.recarray 型を指定してレコード配列に変換することができます。

## Convert a structured array to a record array
recordarr = x.view(np.recarray)

レコード配列を構造化配列に変換する

レコード配列を構造化配列に戻すには、view メソッドを使って構造化配列の元のdtypeを指定することができます。

## Convert a record array to a structured array
x = recordarr.view(dtype=[('name', 'U10'), ('age', int)])

まとめ

この実験では、NumPyにおける構造化配列の作成方法と使い方を学びました。構造化配列は、構造化データを扱う際に便利で、配列の個々のフィールドにアクセスして変更することができます。また、レコード配列についても学びました。レコード配列は、インデックスではなく属性を使ってフィールドにアクセスできるようにすることで、構造化データを扱うためのより便利な方法を提供します。