python

ndarrayの作成方法

numpy.arrayで多次元配列を作成する

numpy.array(以下np.array)は配列オブジェクトを指定してndarrayを作成します。多次元配列を作成する場合、配列オブジェクトにはシーケンス(リストやタプル(基本的にはタプルを使用)など)を入れることに注意しましょう。

import numpy as np

test_1 = np.array([1,2,3])
test_1
=>array([1, 2, 3])

test_2 = np.array([[1,2,3],[4,5,6],[7,8,9]])
test_2
=>array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

test_1では長さが3の1次元配列(ベクトル)を、test_2では3×3の2次元配列(行列)を作成しています。

numpy.zeros(zeros_like)で全ての要素が0の配列を作成する

import numpy as np

test_2 = np.array([[1,2,3],[4,5,6],[7,8,9])

test_3 = np.zeros(4)
test_4 = np.zeros_like(test_2) ## np.zeros(test_2.shape)と同じ

test_3
=>array([0., 0., 0., 0.])
test_4
=>array([[0, 0, 0],
     [0, 0, 0],
     [0, 0, 0]])

np.zerosでは引数にshape(形状)を指定して使用します。test_3の場合は、3を指定したので、長さが3の全ての要素が0の配列が作成されます。

np.zeros_likeではある配列とまったく同様の性質(shape, dtype等)をもった配列を新しく作成し、要素を1で初期化することができます。test_4の場合は、test_2の配列と同質の配列を作成し、要素を1で初期化しました。np.zerosでも同様のことができますが、.shapeをつけなくて済むため、np.zero_likeを使用します。

numpy.ones(ones_like)で全ての要素が1の配列を作成する

import numpy as np

test_5 = np.ones((3,4))
test_6 = np.ones_like(test_2)
test_5
=>array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])
test_6
=>array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]])

zeros/zeros_likeと同じ処理をします。全ての要素が0になるか1になるかの違いがあるだけです。

numpy.empty(empty_like)で非初期化の配列を作成

import numpy as np

test_7 = np.empty(5)
test_7
=>array([4.64180145e-310, 0.00000000e+000, 1.58101007e-322, 0.00000000e+000,
       0.00000000e+000])

test = np.array([1,2,3],[4,5,6])
test_8 = np.empty_like(test)
test_8
=>[[93951105152016              0              0]
 [             0              0              0]]

np.empty/empty_likeでは要素の初期化を行わないため、処理がzeros/onesと比べて速くなります。しかし、要素を指定し初期化を行わないため、各要素の値はめちゃくちゃになる(実行時の環境により値が変化する)ので他で指定する必要があります。