
numpy.onesで全ての要素が0の配列を生成する(ones_like)
全ての要素が0埋めされた状態で配列を生成するには、numpy.ones
を使います。配列のshape(形状)を指定するだけで、全要素が1の配列(ndarray)を生成します。
似たような関数に numpy.ones_like
がありますので、こちらとの違い、使い分けを合わせて紹介します。
ゼロで配列を初期化する、numpy.zero
や numpy.zeros_like
と使い方は変わりません。
numpy.ones関数の使い方
引数でshape(形状)を指定するだけです。多次元配列を生成する場合、シーケンス(リストやタプル)で指定する点に注意しましょう。
以下の例では、"要素数5の配列" と "2×3の2次元配列" を生成しています。各要素の値が1になっていることを確認できます。
import numpy as np
a = np.ones(5) # 要素数5の配列
print(a)
# [ 1. 1. 1. 1. 1.]
b = np.ones((2, 3)) # 2×3の2次元配列をシーケンス(リストやタプル)で指定
print(b)
# [[ 1. 1. 1.]
# [ 1. 1. 1.]]
基本的な使い方は上記のとおりですが、ほかにもパラメータを指定できます。
numpy.ones関数のパラメータ
numpy.ones(shape, dtype=float, order='C')
パラメータ | 型 | 説明 |
---|---|---|
shape | int, intのシーケンス | 生成される配列の形状を指定します。多次元配列の場合はシーケンスで指定します。例: 2×3の配列なら [2, 3] もしくは (2, 3) |
dtype | dtype | 省略可能。出力配列の型を指定します。※省略した場合は float64 になるみたいです。 |
order | string | 省略可能。データをメモリ上にどのような順序で保持するかを、'C' もしくは 'F' で指定します。C言語とFortanのいずれかです。 |
return値として、指定した shape, dtype の ndarray(全要素1) を返します。
パラメータの指定で注意すべきは、shapeの指定をシーケンスで行うという点です。以下にいくつかの全要素1の配列(ndarray)を作ってみます。
import numpy as np
# 10×10、int64、Fortan
a = np.ones((10, 10), dtype="int64", order='F')
# 3×4×5の3次元配列(shapeはリストやタプルで指定する)
b = np.ones((3, 4, 5), dtype="float")
c = np.ones([3, 4, 5], dtype="float")
出力結果はすべて1なので割愛します。
numpy.ones_like関数の使い方
ある配列とまったく同様の性質(shape, dtype等)をもった配列を新しく生成し、要素を1で初期化するには、numpy.ones_like
を使います。numpy.ones
で同じことを実現するよりもすっきり記述できます。
以下に例を示します。
import numpy as np
# 配列aがある
a = np.arange(1, 10, dtype="float")
# 配列aと同じ形状や型の配列をゼロで初期化したものを生成したい
# b = np.ones(a.shape, dtype=a.dtype)
# ↑ のように書くよりもわかりやすい
b = np.ones_like(a)
print(a) # [ 1. 2. 3. 4. 5. 6. 7. 8. 9.]
print(b) # [ 1. 1. 1. 1. 1. 1. 1. 1. 1.]
numpy.ones_like関数のパラメータ
numpy.ones_like(a, dtype=None, order='K', subok=True)
パラメータ | 型 | 説明 |
---|---|---|
a | array_like | 生成する配列と同じ形状や型を持つ配列を指定します。Pythonのシーケンスでも指定可能です。 |
dtype | dtype | 省略可能。出力配列の型を指定します。※省略した場合は aの型を継承します。 |
order | string | 省略可能。データをメモリ上にどのような順序で保持するかを、'C','F','A','K' でから指定します。デフォルトは 'K' で元の配列と同じ順序を継承します。 |
subok | bool | 省略可能。新しく作成された配列は 'a'のサブクラス型を使用します。デフォルトはTrue。 |
return値として、与えられた配列と同じ形と型を持つ全要素1の配列(ndarray)を返します。
numpy.empty(numpy.empty_like)
numpy.ones
は値をゼロで初期化しますが、各要素の値を明示的に初期化しなくてもよい場合、numpy.empty
もしくは numpy.empty_like
が使えます。
numpy.empty
は配列(ndarray)の領域をメモリ上に確保しますが、値の初期化は行いません。したがって生成された配列(ndarray)の各要素の値は何が入っているか不明です。
numpy.empty
は値の初期化を行わないため、numpy.ones
より高速に動作します。しかし、値の設定は別途手動で行う必要がありますので、注意が必要です。
まとめ
numpy.ones
は指定した形状の配列をゼロで初期化したものを生成する。numpy.ones_like
は継承元となる配列を指定し、同じ形状や型を持った配列をゼロで初期化したものを生成する。- ゼロではなく"1"で初期化する
numpy.ones
やnumpy.ones_like
が存在する。 - 値を未初期化の状態で配列を生成する
numpy.empty
やnumpy.empty_like
が存在する。高速だが注意が必要。
以上。