NumPyのzeros関数で 要素が0の初期化配列を生成する方法

np.zeros関数は、全ての要素が0の初期化配列を生成する関数です。このページでは、この関数の使い方を簡潔に解説します。初期化配列を用意する際に使用頻度が高いので、押さえておくと良いでしょう。

なお、同じような関数にnp.zeros_like関数があります。こちらは既にある配列のshape, dtypeなどの属性を引き継いだ上で、全ての要素を0で初期化した配列を生成します。こちらについては、『numpy.zeros_like関数で要素が0の初期化配列を生成する方法』で解説しています。np.zeros関数とは使い勝手が異なるで一緒に確認しておきましょう。

それでは、np.zeros関数を解説していきます。

目次

1. 書式

まずは、np.zeros関数の基本的な書き方を確認しましょう。

numpy.zeros

書き方:

np.zeros(shape, dtype=float, order='C')

パラメーター:

shape: 整数(int型) または 整数のタプル
配列のshapeを指定する。
dtype: データ型(オプション)
要素のデータ型を指定する。デフォルト値はnp.float64。
order: ’C’ か ‘F’ から選択(オプション)
多次元データのメモリレイアウトを C形式(行優先)か Fortran形式(列優先)から選択する。デフォルトは ‘C’。

戻り値: 

out: 配列(ndarray)
全ての要素の値が0で、指定の形状・データ型の初期化配列

一緒に確認したい関数:

  • ones: 要素が1の初期化配列を生成
  • full: 要素が任意の値の初期化配列を生成
  • empty: 要素が空の(未初期化の)化配列を生成

2. サンプルコード

早速、実際のコードで使い方を確認していきましょう。

np.zeros関数の最も基本的な使い方は、引数に任意のshapeを渡すだけというものです。

1次元配列の生成

引数に整数 xを渡すと、shape(x, ) の1次元配列を生成します。これはタプルで渡しても構いません。

In [1]:
import numpy as np
# 1次元配列を生成
np.zeros(5)
Out[1]:
array([0., 0., 0., 0., 0.])

デフォルトのデータ型は float64 です。

In [2]:
# データ型はfloat64
np.zeros(5).dtype
Out[2]:
dtype('float64')

多次元配列の生成

多次元配列を生成する場合は、shapeをタプルで渡します。

In [3]:
# 多次元配列の場合はshapeをタプルで渡す
np.zeros((2, 5))
Out[3]:
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])

データ型の指定

要素のデータ型をデフォルトの float64 から変えたい場合はオプション引数 dtype= で任意のデータ型を指定します。

NumPy配列のデータ型について詳しくは『NumPyのdtypeの一覧と確認・指定・変更方法』で解説していますので、是非ご確認ください。

以下のコードでは、dtype=int と指定しているので、配列の要素のデータ型は int64 になっています。

In [4]:
# データ型に int を指定
x = np.zeros((2, 5), dtype=int)
x
Out[4]:
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])
In [5]:
x.dtype
Out[5]:
dtype('int64')

このオプション引数を使うことで構造化配列を生成することも可能です。構造化配列とは、その名の通り配列のそれぞれの要素にラベルを与えたものです。これについても、『NumPyのdtypeの一覧と確認・指定・変更方法』で解説しています。

In [6]:
# 構造化配列の生成
x = np.zeros(2, dtype=[('grade', 'int'), ('height', 'float')])
x
Out[6]:
array([(0, 0.), (0, 0.)], dtype=[('grade', '<i8'), ('height', '<f8')])
In [7]:
x['grade']
Out[7]:
array([0, 0])
In [8]:
x['height']
Out[8]:
array([0., 0.])

なお、構造化配列は、np.zeros関数だけでなく、オプション引数 dtype= がある配列作成関数なら作成することができます。

メモリレイアウトの指定

オプション引数 order= では、配列のメモリレイアウトを C言語方式か Fortran方式から指定することができます。これは Fortran方式のデータを扱う場合に使うもので、ほとんどの場合、使うケースはあまりないでしょう。

In [9]:
#  メモリレイアウトに Fortran方式を指定
x = np.zeros((2, 2), order='F')
x
Out[9]:
array([[0., 0.],
       [0., 0.]])
In [10]:
# メモリレイアウトの確認
x.flags['F_CONTIGUOUS']
Out[10]:
True

3. まとめ

以上のように、np.zeros関数は、すべての要素を0で初期化した新しい配列を生成する関数です。

なお、これと似た機能を持つものにnp.zeros_like関数があります。こちらは、既存の配列の形状、データ型、メモリレイアウト、サブクラス などの属性を引き継いだ上で、要素を0で初期化した新しい配列を生成します。こちらについては以下のページで解説していますので、ご確認ください。

また、他に初期化配列を生成する関数には、以下のものがありますので併せて確認しておくと良いでしょう。

それぞれうまく使い分けましょう。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる