NumPyは、Pythonで数値計算を行うためのライブラリです。NumPyを使うと、効率的な数値計算に不可欠な多次元配列を簡単に作成・操作できます。この記事では、NumPyで0で初期化された配列を生成するためのzeros関数の基本的な使い方、そしてzeros_like関数との使い分けについて解説します。
zerosの基本的な使い方
zeros関数は、指定した形状(shape)とデータ型(dtype)を持つ、すべての要素が0で初期化された配列を生成します。
最もシンプルな例
import numpy as np # 形状が(2, 3)の2次元配列を生成 arr = np.zeros((2, 3)) print(arr)
このコードでは、np.zeros((2, 3))によって、2行3列の2次元配列が生成され、arr変数に格納されます。zeros関数はデフォルトでfloat64型の0を生成します。
出力
[[0. 0. 0.] [0. 0. 0.]]
形状の指定
zeros関数の最初の引数には、生成したい配列の形状をタプルで指定します。
# 5つの要素を持つ1次元配列 arr1 = np.zeros(5) print(arr1) # 3x4x2の3次元配列 arr2 = np.zeros((3, 4, 2)) print(arr2)
出力
[0. 0. 0. 0. 0.] [[[0. 0.] [0. 0.] [0. 0.] [0. 0.]] [[0. 0.] [0. 0.] [0. 0.] [0. 0.]] [[0. 0.] [0. 0.] [0. 0.] [0. 0.]]]
データ型の指定
dtype引数で、配列のデータ型を指定できます。デフォルトはfloat64です。
# int型の配列 arr_int = np.zeros((2, 2), dtype=int) print(arr_int) # complex型の配列 arr_complex = np.zeros((2, 2), dtype=complex) print(arr_complex)
出力
[[0 0] [0 0]] [[0.+0.j 0.+0.j] [0.+0.j 0.+0.j]]
メモリレイアウトの指定(order)
order引数を使うと、多次元配列のメモリ上での配置順序を指定できます。
'C'(C言語スタイル)を選ぶと行優先、'F'(Fortranスタイル)を選ぶと列優先になります。デフォルトは'C'です。
通常意識する必要はありませんが、特定の計算ライブラリと連携する際に、パフォーマンスに影響することがあります。
# Fortranスタイルの配列 arr_f = np.zeros((2, 3), order='F')
zeros_likeの使い方
zeros_like関数は、既存の配列と同じ形状とデータ型を持つ、0で初期化された配列を生成します。
# 既存の配列 arr = np.array([[1, 2, 3], [4, 5, 6]]) # arrと同じ形状とデータ型の0配列を生成 arr_zeros = np.zeros_like(arr) print(arr_zeros)
出力
[[0 0 0] [0 0 0]]
zeros_likeは、既存の配列の形状や型を明示的に指定せずに、それらを引き継いだ新しい配列を作成したい場合に便利です。
zeros と zeros_like の使い分け
| 機能 | zeros |
zeros_like |
|---|---|---|
| 新規配列の生成 | ○ | ○ |
| 形状の指定 | 必要 | 不要(既存配列から取得) |
| データ型の指定 | 可能 | 不要(既存配列から取得) |
zeros: 配列の形状とデータ型を明示的に指定して、新しい配列を作成する場合zeros_like: 既存の配列と同じ形状とデータ型を持つ配列を作成する場合
まとめ
NumPyのzerosとzeros_likeは、0で初期化された配列を生成します。
zerosは形状やデータ型を直接指定するのに対し、zeros_likeは既存の配列を基にする点が異なります。
これらの関数を使い分けることで、NumPyを使った数値計算を効率的に行えます。
1で初期化された配列を生成するNumpyのonesについては、下記の記事で解説しています。