2.Numpy配列

Numpyの操作をコマンドプロンプト上で実行する場合は、Pythonを起動後、最初にこのコマンドを実行します (Numpyのインポート)。
>>> import numpy as np
これにより“numpy.***”と入力するところを“np.***”と短縮できます。

2.1.Numpy配列の作成

  1. 配列の作成
  2. 空配列
  3. 成分がすべて“0”、“1”の配列
  4. 成分がすべて指定値の配列
  5. 単位行列
  6. 連番配列の作成
  7. 乱数行列の作成
  8. ndarray

(1)配列の作成

  • numpy.array(object, dtype=None, ndmin=0)
object 配列の中身を指定します。 各次元ごとの配列要素数は同じでなければなりません。
dtype データ型を指定します。未指定時は配列の中身の型で決まります。 各次元ごとの配列要素数は同じでなければなりません。
ndmin 配列の最小次元を指定します。 未指定で構いません。

a)一次配列
#要素に一つ小数が含まれる場合 → float型
>>> np.array([1.5, 2, 3])
array([ 1.5,  2. ,  3. ])

#要素がすべて整数の場合 → int型
>>> np.array([1, 2, 3])
array([1, 2, 3])

型を指定する場合
#float型
>>> np.array([1.5, 2.3, 3.1], dtype = float)
array([1.5, 2.3, 3.1])

#int型
>>> np.array([1.5, 2.3, 3.1], dtype = int)
array([1, 2, 3])

b)二次配列
#行ベクトル(1×3行列)
>>> np.array([[1,2,3]])
array([[1, 2, 3]])

#列ベクトル(3×1行列)
>>> np.array([[1],[2],[3]])
array([[1],
       [2],
       [3]])

#2×3行列
>>> np.array(([1., 2., 3.], [4., 5., 6.]))
array([[ 1.,  2.,  3.],
       [ 4.,  5.,  6.]])

c)三次配列
>>> np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
array([[[1, 2],
        [3, 4]],

       [[5, 6],
        [7, 8]]])

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

リスト(1章参照)を使ってNumpy配列を作ることもできます。
>>> p = [1,2,3]	#リスト
>>> q = [4,5,6]	#リスト
>>> np.array([p, q])
array([[1, 2, 3],
       [4, 5, 6]])

>>> np.array([[1, 2, 3], q])
array([[1, 2, 3],
       [4, 5, 6]])

Numpy配列を変数に引き当てる場合は次のようにします(変数を“a”とします)。
>>> a = np.array([1.5, 2.3, 3.1])
>>> a
array([ 1.5,  2.3,  3.1])

節はじめに戻る


(2)空配列

  • numpy.empty(shape, dtype = none)
shape 配列のサイズを指定します。 二次以上は(*, *)(タプル)で指定します。
dtype データ型を指定します。未指定でも構いません。

空配列には不定値が入ります。
空配列の用途としては、例えば事前に配列サイズを決めておいて、後から要素に代入していく場合に使います。
>>># 1×3行列(3次元行ベクトル)
>>> np.empty(3)
array([  8.22823490e-312,   8.22823491e-312,   0.00000000e+000])

>>># 2×2行列
>>> np.empty((2, 2))
array([[  8.22805340e-312,   8.22805364e-312],
       [  8.67148726e-315,   8.67148726e-315]])

節はじめに戻る


(3)成分がすべて“0”、“1”の配列

  • numpy.zeros(shape, dtype = none)
  • numpy.ones(shape, dtype = none)
shape 配列のサイズを指定します。 二次以上は(*, *)(タプル)で指定します。
dtype データ型を指定します。未指定でも構いません。

すべて“0”の配列の作成は“zeros”、すべて“1”の配列の作成は“ones”を用います。
#すべて0の配列
>>> np.zeros(3)		# 1×3の零行列(3次元0行ベクトル)
array([ 0.,  0.,  0.])

>>> np.zeros((3, 2))	# 3×2の零行列
array([[ 0.,  0.],
       [ 0.,  0.],
       [ 0.,  0.]])

#すべて1の配列
>>> np.ones(3)
array([ 1.,  1.,  1.])

>>> np.ones(3, dtype = int)	#int型(指定なしはfloat型)
array([1, 1, 1])

節はじめに戻る


(4)成分がすべて指定値の配列

  • numpy.full(shape, value, dtype = none)
shape 配列のサイズを指定します。 二次以上は(*, *)(タプル)で指定します。
dtype データ型を指定します。未指定でも構いません。

>>> np.full((3,5),1.25)
array([[ 1.25,  1.25,  1.25,  1.25,  1.25],
       [ 1.25,  1.25,  1.25,  1.25,  1.25],
       [ 1.25,  1.25,  1.25,  1.25,  1.25]])

>>> np.full((3,5),1.25,dtype=int)
array([[1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1]])

節はじめに戻る


(5)単位行列

  • numpy.identity(dim, dtype = none)
dim 単位行列(正方行列)の次元を指定します。
dtype データ型を指定します。未指定でも構いません。

>>> np.identity(3)
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])

節はじめに戻る


(6)連番配列の作成

a)arange
  • numpy.arange(start, stop, step, dtype = none)
start 連番の開始番号を指定します。 未指定時は“0”が適用されます。
stop 連番の終了番号を指定します。 配列に含まれるのは1つ前の数値までで、stopで指定した値は含まれません。
step 配列の等差幅を指定します。 未指定時は“1”が適用されます。
dtype データ型を指定します。 未指定でも構いません。 データ型の指定が不適切な場合、挙動がおかしくなる場合があります。

>>> np.arange(10)			#0~9までの連番
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> np.arange(5, 10)		#5~9までの連番
array([5, 6, 7, 8, 9])

>>> np.arange(0, 10, 2)		#0~9までで2飛びの等差数列
array([0, 2, 4, 6, 8])

>>> np.arange(0, 10, 0.5)		#0~9までで0.5飛びの等差数列
array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5,  5. ,
        5.5,  6. ,  6.5,  7. ,  7.5,  8. ,  8.5,  9. ,  9.5])

#挙動が変
>>> np.arange(0, 10, 0.5 ,dtype = int)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

b)linspace
  • numpy.linspace(start, stop, num = 50, endpoint = True, retstep = False, dtype = none)
start 連番の開始番号を指定します。 未指定は許されません。
stop 連番の終了番号を指定します。 endpoint未指定時、stopで指定した値も配列に含まれます(arangeと異なります)。
num 配列に含まれる要素の数を指定します。 未指定時は“50”が適用されます。
endpoint “True”ならstopで指定した値が含まれ、“False”なら含まれません。
retstep “True”なら戻り値にステップサイズを含め、“False”なら含めません。 未指定時は“False”が適用されます。
dtype データ型を指定します。 未指定でも構いません。

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

#endpoint = Falseとすると
>>> np.linspace(1,10,10,endpoint=False)
array([ 1. ,  1.9,  2.8,  3.7,  4.6,  5.5,  6.4,  7.3,  8.2,  9.1])

#型を指定すると
>>> np.linspace(1,10,10,endpoint=False,dtype=int)
array([1, 1, 2, 3, 4, 5, 6, 7, 8, 9])

#Stepサイズも取得する
>>> np.linspace(1,10,10,retstep=True)
(array([  1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.]), 1.0)

>>> np.linspace(0,10)	#要素数指定なし → 要素数 = 50
array([  0.        ,   0.20408163,   0.40816327,   0.6122449 ,
         0.81632653,   1.02040816,   1.2244898 ,   1.42857143,
         1.63265306,   1.83673469,   2.04081633,   2.24489796,
         2.44897959,   2.65306122,   2.85714286,   3.06122449,
         3.26530612,   3.46938776,   3.67346939,   3.87755102,
         4.08163265,   4.28571429,   4.48979592,   4.69387755,
         4.89795918,   5.10204082,   5.30612245,   5.51020408,
         5.71428571,   5.91836735,   6.12244898,   6.32653061,
         6.53061224,   6.73469388,   6.93877551,   7.14285714,
         7.34693878,   7.55102041,   7.75510204,   7.95918367,
         8.16326531,   8.36734694,   8.57142857,   8.7755102 ,
         8.97959184,   9.18367347,   9.3877551 ,   9.59183673,
         9.79591837,  10.        ])

c)logspace
  • numpy.logspace(start, stop, num = 50, endpoint = True, base = 10.0, dtype = none)
start 連番の開始番号を指定します。 未指定は許されません。
stop 連番の終了番号を指定します。 stopで指定した値も配列に含まれます(arangeと異なります)。
num 配列に含まれる要素の数を指定します。 未指定時は“50”が適用されます。
endpoint “True”ならstopで指定した値が含まれ、“False”なら含まれません。
base 対数(log)の底をしてします。 未指定時は“10”が適用されます。
dtype データ型を指定します。 未指定でも構いません。

>>> np.logspace(1, 10, 11)
array([  1.00000000e+01,   7.94328235e+01,   6.30957344e+02,
         5.01187234e+03,   3.98107171e+04,   3.16227766e+05,
         2.51188643e+06,   1.99526231e+07,   1.58489319e+08,
         1.25892541e+09,   1.00000000e+10])

節はじめに戻る


(7)乱数行列の作成

a)random
  • numpy.random.random(shape)
shape 配列のサイズを指定します。

>>> np.random.random(3)
array([ 0.82376609,  0.59955979,  0.53696887])

>>> np.random.random((3,2))
array([[ 0.19841931,  0.16961359],
       [ 0.02698173,  0.74162151],
       [ 0.70249541,  0.07957857]])

b)randint
  • numpy.random.randint(min,MAX,shape)
min 乱数範囲の下限値
MAX 乱数範囲の上限値
shape 配列のサイズを指定します。

>>> np.random.randint(0,10,(3,2))
array([[8, 8],
       [2, 7],
       [5, 3]])

c)normal
  • numpy.random.normal(loc = 0.0, scale = 1.0, shape)
loc ガウス分布の中央値を指定します。
scale ガウス分布の標準偏差を指定します。
shape 配列のサイズを指定します。

>>> np.random.normal(0,10,(3,2))
array([[ -1.98172915,   2.86335818],
       [-14.75243935,  10.63485872],
       [ -5.19977292,  -1.23107232]])

節はじめに戻る


(8)ndarray

Numpy配列の型をPythonの“type()”で調べると“ndarray”になります。
>>> np.array([1,2,3])
array([1, 2, 3])
>>> type(a)
<class 'numpy.ndarray'>

Numpy形式のn次配列をつくります。 要素には不定値が入ります。 numpy.empty同様、事前に配列サイズを決めておく必要がある場合に使います。
  • numpy.ndarray(shape, dtype)
shape 配列のサイズを指定します。
dtype データ型を指定します。未指定時はfloat型になります。

>>> np.ndarray((3,3))		#np.ndarray(shape(3,3))でもOK
array([[  4.67296746e-307,   6.23057009e-307,   1.42417221e-306],
       [  6.23038675e-307,   9.34609790e-307,   9.34600963e-307],
       [  6.23061763e-307,   1.11261095e-306,   2.22507386e-306]])

>>> np.ndarray((4,3,2),int)	#np.ndarray(shape=(4,3,2),dtype=int)でもOK
array([[[1848537198, 1920098660],
        [ 673741153,  691219507],
        [    658729, 1680615730]],

       [[1701869940, 1953392957],
        [1685221164,  658338405],
        [ 220800838, 1702101002]],

       [[ 543450478, 1970302569],
        [1935745140, 1679843616],
        [1869046121,  778854766]],

       [[ 538970634, 1632641056],
        [1701667186, 1936876916],
        [ 538976266,  757935392]]])

節はじめに戻る


参考文献