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]]])

特殊な配列の作成

線形代数学でよく使われる配列
>>> np.zeros([2,3])       # 全要素が0の配列
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
>>> np.ones([2,3])        # 全要素が1の配列
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])
>>> np.full([2,2], 10)    # 全要素が同じ値の配列
array([[ 10.,  10.],
       [ 10.,  10.]])
>>> np.identity(3)        # 単位行列
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])
>>> 他の配列と同じサイズの配列
>>> b = np.array([[1, 2, 3],
...               [4, 5, 6]])
>>> np.zeros_like(b)
array([[0, 0, 0],
       [0, 0, 0]])
>>> np.ones_like(b)
array([[1, 1, 1],
       [1, 1, 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)
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.arange(1,10,2)
array([1, 3, 5, 7, 9])
>>> np.linspace(2,3,5)
array([ 2.  ,  2.25,  2.5 ,  2.75,  3.  ])
ランダムな要素を持つ配列

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

>>> np.random.seed(32)
>>> # seed値(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)で均等分布の整数
2
>>> np.random.randint(5, 10) # 区間[5, 10)で均等分布の整数
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