numpy.array操作の簡単なまとめ

3833 ワード

import numpy as np
numpy.array常用変数及びパラメータ
  • dtype変数で、データ型を格納し、配列を作成するときに同時に指定できます.
  • shape変数は、配列の大きさを格納し、この人の値は可変であり、無素個数が変わらないことを確保すれば任意に変更することができる.(-1は自動適合で、個数が変わらないことを保証する)
  • reshapeメソッドでは、元の配列とメモリが共有され、同じメモリを指す形状を変更した配列を作成します. 

  • 配列の作成方法
    np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]], dtype=np.float)
    np.arange(0,1,0.1) #0 1     0.1   ,       1
    np.linspace(0, 1, 5) #   :0,   1,      5。 array([ 0.  ,  0.25,  0.5 ,  0.75,  1.  ])
    np.logspace(0, 1, 5) #   :0,   1,      5. array([ 10**0.  ,  10**0.25,  10**0.5 ,  10**0.75,  10**1.  ])
                         #     array([  1.        ,   1.77827941,   3.16227766,   5.62341325,  10.        ])
    
    s = 'abcdefg'
    np.fromstring(s, dtype=np.int8)
    
    def func2(i, j):
        return (i+1) * (j+1)
    np.fromfunction(func2, (9,9))
    
    np.ones((2, 2))
    np.zero((2, 2))
    np.eye(2)
    
    #      :
    np.arange(0, 60, 10).reshape(-1, 1) + np.arange(0, 6)

    データ読み込み
    に合格
    下付き範囲でデータを取得:python listオブジェクトの操作と一致します.違いはこの方法です
    取得した配列は元の配列とメモリ共有されます.
    に合格
    整数シーケンスによる新しい配列の取得:例x[
    [3,2,3,2],新しい配列が生成され,メモリが共有されない
    使用
    ブール配列取得データ:例:
    x[np.array([True,False,True,False,False])]またはx[x>0.5]
    を返します.
    コードの例:
    >>> x = np.arange(10)
    >>> y = x[::-1]
    >>> x
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    >>> y
    array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
    >>> y[0] = 100
    >>> x
    array([  0,   1,   2,   3,   4,   5,   6,   7,   8, 100])
    >>> y
    array([100,   8,   7,   6,   5,   4,   3,   2,   1,   0])
    >>> x[0] = 99
    >>> x
    array([ 99,   1,   2,   3,   4,   5,   6,   7,   8, 100])
    >>> y
    array([100,   8,   7,   6,   5,   4,   3,   2,   1,  99])
    >>> y = x[1:6]
    >>> y
    array([1, 2, 3, 4, 5])
    >>> y[2] = 33
    >>> y
    array([ 1,  2, 33,  4,  5])
    >>> x
    array([ 99,   1,   2,  33,   4,   5,   6,   7,   8, 100])
    >>> x[[3,2,3,2]]
    array([33,  2, 33,  2])
    >>> z = x[[3,2,3,2]]
    >>> z
    array([33,  2, 33,  2])
    >>> z[3] = 4
    >>> z
    array([33,  2, 33,  4])
    >>> x
    array([ 99,   1,   2,  33,   4,   5,   6,   7,   8, 100])
    >>> x[x>10]
    array([ 99,  33, 100])
    >>> 
    

    アレイ拡張
    np.vstack((a,b):行数を増やし、bデータをaの下に追加し、上下に接続します.
    np.hstack((a,b):列数を増やし、a,bを左右に接続します.
    >>> a = np.ones((3,3))
    >>> b = np.eye(3)
    >>> a
    array([[ 1.,  1.,  1.],
           [ 1.,  1.,  1.],
           [ 1.,  1.,  1.]])
    >>> b
    array([[ 1.,  0.,  0.],
           [ 0.,  1.,  0.],
           [ 0.,  0.,  1.]])
    >>> b *= 2
    >>> b
    array([[ 2.,  0.,  0.],
           [ 0.,  2.,  0.],
           [ 0.,  0.,  2.]])
    >>> np.vstack((a, b))
    array([[ 1.,  1.,  1.],
           [ 1.,  1.,  1.],
           [ 1.,  1.,  1.],
           [ 2.,  0.,  0.],
           [ 0.,  2.,  0.],
           [ 0.,  0.,  2.]])
    >>> 
    >>> np.hstack((a, b))
    array([[ 1.,  1.,  1.,  2.,  0.,  0.],
           [ 1.,  1.,  1.,  0.,  2.,  0.],
           [ 1.,  1.,  1.,  0.,  0.,  2.]])

    ufunc演算
    ufuncはuniversal functionの略で、配列の各要素を操作できる関数です.NumPyに内蔵されている多くのufunc関数はC言語レベルで実現されているため、計算速度が非常に速い.
    np.sin(x, x)
    np.add(a, b) ~ a+b
    np.subtract(a, b) ~ a-b
    np.multiply(a, b) ~ a*b
    divide ~ a/b
    floor divide  ~ a//b
    negative ~ -a
    power ~ a**b
    remainder ~ a % b

    注意:複雑な演算では、中間ステップの集まりに一時変数があり、演算速度が遅くなります.
    次のようになります.
    x = a*b + c

    に等しい
    t = a*b
    x = t + c
    del t

    手動で最適化
    x = a * b
    x += c

    2 D配列を1 Dに変換
    >>> a
    array([[ 1,  2,  3,  4],
           [ 4,  5,  6,  7],
           [ 7,  8,  9, 10]])
    >>> a.ravel()
    array([ 1,  2,  3,  4,  4,  5,  6,  7,  7,  8,  9, 10])
    reshape         。