AI資格ドリル
資格を選ぶ

用語比較

np.zerosとnp.emptyの違い|0で埋めるか、初期化しないか(Python3データ分析)

np.zeros は指定した形の配列を0で埋めて返し、np.empty は形だけを確保して中身を初期化しません。

empty の配列の値は任意なので、再現できる動きにしたいなら、読む前にすべての要素へ値を入れます。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。

np.zerosとnp.emptyの要点

np.zeros

指定した形と型の配列を、0で埋めて返す。dtype の既定値は float64。結果は毎回同じ。

np.empty

指定した形と型の配列を、初期化せずに返す。中身は不定。zeros などより少しだけ速い場合がある。dtype の既定値は float64。

違いを表で確認

比較軸np.zerosnp.empty
配列の中身すべて 0不定(初期化されない任意の値)
速度初期化の分の処理がある初期化しないので、わずかに速い場合がある
結果の再現性毎回同じ実行のたびに違う値になりうる
引数shape・dtype・order。dtype の既定値は float64shape・dtype・order。dtype の既定値は float64

Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

結果を足し込む入れ物を用意したい人

zeros を使います。0で始まるので、合計や集計の初期値として安全です。

02

すべての要素に値を書き込んでから読む人

empty を使えます。公式は、再現できる動きにするには読む前に各要素へ値を入れるよう書いています。

03

empty の結果が毎回違って、戸惑った人

empty は初期化されないため、中身は不定です。0を期待するなら zeros を使います。

具体例で使い分ける

例 1

zeros は 0 で埋まる

公式の例の s = (2, 2) と np.zeros(s) を見ます。

  • shape に (2, 2) を渡すと、2行2列の配列ができます。
  • 結果は array([[0., 0.], [0., 0.]]) で、すべて 0 です。
  • np.zeros((5,), dtype=np.int_) なら、array([0, 0, 0, 0, 0]) と整数の 0 になります。

結論: zeros は、形と型を指定すれば、中身が確実に 0 の配列になります。

例 2

empty の中身は不定

公式の例の np.empty([2, 2]) を見ます。

  • 公式の例の出力は array([[-9.74499359e+001, 6.69583040e-309], [2.13182611e-314, 3.06959433e-309]]) で、不定の値が並んでいます。
  • 公式は、この出力に「#uninitialized」と注記しています。
  • 実行する環境や回によって、違う値になることがあります。

結論: empty の値は読んではいけません。先に全要素へ値を入れます。

例 3

dtype を整数にしても不定

公式の例の np.empty([2, 2], dtype=np.int_) を見ます。

  • dtype を整数にしても、初期化されないことは変わりません。
  • 公式の例の出力は array([[-1073741821, -1067949133], [496041986, 19249760]]) で、不定の整数です。

結論: dtype を指定しても、empty の中身は初期化されません。

問題文から答えを選ぶ手順

  1. 1

    読む前に全要素を書き込むかを決める

    書き込むなら empty でよい。0から始めたいなら zeros です。

  2. 2

    再現性が要るかを確かめる

    結果を毎回同じにしたいなら zeros。empty は中身が不定です。

  3. 3

    dtype を決める

    指定しなければ float64 です。整数が要るなら dtype を渡します。

試験での見分け方

  • 10から始めたい配列には zeros を使う。
  • 2全要素へ値を書き込んでから読む配列には、empty を使える。
  • 3empty の中身は、書き込む前に読まない。
  • 4どちらも dtype の既定値は float64 である。

誤答しやすい選択肢

empty は「空の配列」で、中身は 0 だと考える

修正: empty は初期化しないので、中身は不定です。0が要るなら zeros を使います。

empty の方が必ず速いと考える

修正: 公式は「marginally faster(わずかに速い場合がある)」と書いています。大きな差を前提にしません。

empty は要素数が 0 の配列を返すと考える

修正: empty は、指定した形の配列を確保します。(2, 2) なら4要素あります。要素数が 0 になるわけではありません。

確認問題

Q1中身がすべて 0 になるのは、zerosとemptyのどちらか?

答え: zeros

公式は、zeros を「filled with zeros」、empty を「without initializing entries」と説明しています。

Q2np.zeros((2, 2)) の結果は?

答え: array([[0., 0.], [0., 0.]])

dtype の既定値は float64 なので、0. と小数で表示されます。

Q3np.empty([2, 2]) の中身は?

答え: 不定(初期化されない任意の値)

公式は、値は arbitrary で、再現できる動きにするには読む前に各要素へ値を入れるよう書いています。

Q4zeros と empty の dtype の既定値は?

答え: float64

公式は、どちらも dtype の既定値を numpy.float64 としています。

到達チェック

  • zeros と empty の違いを、初期化の言葉で説明できる
  • empty の中身が不定であることを言える
  • dtype の既定値を答えられる
  • empty を使ってよい場面を言える

同じ資格で次に知りたいこと

よくある質問

Qnp.zerosとnp.emptyの違いは?

A

zeros は0で埋めた配列を返し、empty は初期化しない配列を返します。empty の中身は不定です。

Qemptyはzerosより速いですか?

A

公式は、empty は初期化しないので、わずかに速い場合があると書いています。

Qemptyを使うとき、何に気をつけますか?

A

公式は、再現できる動きにするため、読む前に配列の各要素へ値を入れるよう書いています。

Qデータ分析試験の範囲?

A

本サイトの第3章 NumPy で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。

次に見る比較

執筆: AI資格ドリル編集部(運営者情報を見る)