Helve’s Python memo

Pythonを使った機械学習やデータ分析の備忘録

<NumPy> 配列の作成

目次

基本的な配列の作成

>>> import numpy as np
>>> a = np.array([1,2,3])                       # 1次元配列
>>> a
array([1, 2, 3])
>>> b = np.array([[1,2,3],[4,5,6]])             # 2次元配列
>>> b
array([[1, 2, 3],
       [4, 5, 6]]) 
>>> c = np.array([[[1,2],[3,4]],[[5,6],[7,8]]]) # 3次元配列
>>> c
array([[[1, 2],
        [3, 4]],

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

特殊な配列の作成

線形代数学でよく使われる配列

全要素が0の配列
>>> np.zeros(3)           # 1次元の配列
array([ 0.,  0.,  0.])
>>> np.zeros([2,3])       # 2次元の配列
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
>>> b = np.array([[1, 2, 3],
...               [4, 5, 6]])
>>> np.zeros_like(b)      # 他の配列と同じサイズの配列
array([[0, 0, 0],
       [0, 0, 0]])
全要素が1の配列
>>> np.ones(3)           # 1次元の配列
array([ 1.,  1.,  1.])
>>> np.ones([2,3])       # 2次元の配列
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])
>>> b = np.array([[1, 2, 3],
...               [4, 5, 6]])
>>> np.ones_like(b)      # 他の配列と同じサイズの配列
array([[1, 1, 1],
       [1, 1, 1]])
全要素が同じ値の配列
>>> np.full(3, 10)       # 1次元の配列
array([10, 10, 10])
>>> np.full([2,2], 10)   # 2次元の配列
array([[ 10.,  10.],
       [ 10.,  10.]])
>>> b = np.array([[1, 2, 3],
...               [4, 5, 6]])
>>> np.full_like(b, 10)  # 他の配列と同じサイズの配列
array([[10, 10, 10],
       [10, 10, 10]])
単位行列など
>>> np.identity(3)        # 単位行列
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])
>>> np.eye(3)             # 単位行列(引数が1個の場合)
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])
>>> np.eye(2, 3)          # 主対角が1, それ以外が0の3x2行列
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.]])
>>>
>>> 1となる対角をkで指定(k>0は主対角より上、k<0は主対角より下)
>>> np.eye(4, 5, k=1)  
array([[ 0.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  0.,  1.]])

三角行列

>>> np.tri(3,5,k=0)
array([[ 1.,  0.,  0.,  0.,  0.],
       [ 1.,  1.,  0.,  0.,  0.],
       [ 1.,  1.,  1.,  0.,  0.]])
>>> np.tri(3,5,k=-1)  # k>0は主対角より上の対角、k<0は主対角より下の対角
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 1.,  0.,  0.,  0.,  0.],
       [ 1.,  1.,  0.,  0.,  0.]])
>>>
>>> b = np.array([[1,2,3],[4,5,6]])
>>> b
array([[1, 2, 3],
       [4, 5, 6]])
>>> np.tril(b)        # 行列の下三角部分
array([[1, 0, 0],
       [4, 5, 0]])
>>> np.tril(b, k=-1)  # kで0とする対角を指定(デフォルトはk=0: 主対角)
array([[0, 0, 0],
       [4, 0, 0]])
>>> np.triu(b)        # 行列の上三角部分
array([[1, 2, 3],
       [0, 5, 6]])

線形に等間隔な1次元配列

>>> np.arange(1,10)    # 区間[1, 10)の整数
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.arange(1,10,2)  # 区間[1, 10)の整数を2刻みで
array([1, 3, 5, 7, 9])
>>> np.linspace(2,3,5) # 線形に等間隔な区間[2, 3]の数を5個
array([ 2.  ,  2.25,  2.5 ,  2.75,  3.  ])

ランダムな要素を持つ配列

numpy.randomモジュールを使用する

>>> np.random.seed(32)
>>> # シード値(32ビットの正整数)の設定により、常に一定順序の乱数列が発生
>>> np.random.rand(2,3)      # 区間[0, 1)で一様分布
array([[ 0.85888927,  0.37271115,  0.55512878],
       [ 0.95565655,  0.7366696 ,  0.81620514]])
>>> np.random.randn(2, 3)    # 正規分布(平均0, 分散1)
array([[ 1.47179053,  1.66318101, -0.26117712],
       [-0.68867681, -0.69492326,  1.94042346]])
>>> np.random.randint(10)    # 区間[0, 10)で均等分布の整数(引数1つの場合)
2
>>> np.random.randint(5, 10) # 区間[5, 10)で均等分布の整数(引数2つの場合)
9
>>> np.random.randint(5, 10, size=(2, 4)) # sizeオプションで配列サイズを指定
array([[9, 6, 6, 8],
       [8, 5, 7, 9]])

参考:
Array creation — NumPy v1.13.dev0 Manual
Random sampling (numpy.random) — NumPy v1.13 Manual

広告を非表示にする