用語比較
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.zeros | np.empty |
|---|---|---|
| 配列の中身 | すべて 0 | 不定(初期化されない任意の値) |
| 速度 | 初期化の分の処理がある | 初期化しないので、わずかに速い場合がある |
| 結果の再現性 | 毎回同じ | 実行のたびに違う値になりうる |
| 引数 | shape・dtype・order。dtype の既定値は float64 | shape・dtype・order。dtype の既定値は float64 |
Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)
PRどこで迷っているかを切り分ける
結果を足し込む入れ物を用意したい人
zeros を使います。0で始まるので、合計や集計の初期値として安全です。
すべての要素に値を書き込んでから読む人
empty を使えます。公式は、再現できる動きにするには読む前に各要素へ値を入れるよう書いています。
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
読む前に全要素を書き込むかを決める
書き込むなら empty でよい。0から始めたいなら zeros です。
- 2
再現性が要るかを確かめる
結果を毎回同じにしたいなら zeros。empty は中身が不定です。
- 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 を使ってよい場面を言える
関連ページで確認する
同じ資格で次に知りたいこと
- np.ravelとflattenの違い|必要なときだけコピーするか、常にコピーを返すか(Python3データ分析)
NumPyのnp.ravel(コピーは必要なときだけ)とndarray.flatten(常にコピーを返す)の違いを、戻り値、order引数、元の配列への影響で整理します。NumPy公式リファレンスの例のnp.ravel(x, order='F')が[1, 4, 2, 5, 3, 6]になる計算つきです。
- np.sortとnp.argsortの違い|並べ替えた値か、並べ替える順番の添字か(Python3データ分析)
NumPyのnp.sort(並べ替えた配列のコピー)とnp.argsort(並べ替える順番を表す添字の配列)の違いを、返り値、元の配列との関係、使いどころで整理します。NumPy公式リファレンスの例のx = np.array([3, 1, 2])でnp.argsort(x)がarray([1, 2, 0])になる点つきです。
- DataFrame.pivotとpivot_tableの違い|集計しない組み替えか、集計つきの表か(Python3データ分析)
pandasのpivot(集計せずに表の形を組み替える)とpivot_table(集計して表にする)の違いを、重複する組み合わせの扱い、aggfunc、使いどころで整理します。pandas公式リファレンスの例で、同じindexとcolumnsの組が重複するとpivotが
ValueErrorになる点つきです。
よくある質問
Qnp.zerosとnp.emptyの違いは?
zeros は0で埋めた配列を返し、empty は初期化しない配列を返します。empty の中身は不定です。
Qemptyはzerosより速いですか?
公式は、empty は初期化しないので、わずかに速い場合があると書いています。
Qemptyを使うとき、何に気をつけますか?
公式は、再現できる動きにするため、読む前に配列の各要素へ値を入れるよう書いています。
Qデータ分析試験の範囲?
本サイトの第3章 NumPy で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
